【问题标题】:UIScrollView initializes with a frame at {0, 0} but width and height of {0, 0}UIScrollView 使用 {0, 0} 处的框架进行初始化,但宽度和高度为 {0, 0}
【发布时间】:2013-07-03 05:58:40
【问题描述】:

我创建了一个视图控制器,顶部有一个导航栏,底部有一个标签栏,只有一个 UIScrollView 占据了中间的所有剩余空间。我已经为视图控制器头文件上的滚动视图创建了一个弱的、非原子的IBOutlet。我不明白的是,当我从所有者视图控制器打印出它的帧值时,宽度和高度值如何为零。

这是视图控制器的头文件:

#import <UIKit/UIKit.h>

@interface AdGalleryViewController : UIViewController<UIScrollViewDelegate>
@property (nonatomic, weak) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) NSArray *imageURLs;
@end

实现文件:

- (void)viewDidLoad
{
    [super viewDidLoad];
    CGRect svFrame = self.scrollView.frame;
    NSLog(@"scroll view frame: %@", NSStringFromCGRect(svFrame));
}

输出:

2013-07-05 15:36:21.447 Sulit[2733:907] scroll view frame: {{0, 0}, {0, 0}}

发生了什么事?

【问题讨论】:

  • 请检查你的滚动视图与它的委托和 IBOutlet 连接
  • 你在使用自动布局吗?
  • 我是。我还刚刚将滚动视图作为其代表连接到文件所有者(只是在上述评论之后发现我没有这样做),但仍然为零。
  • 委托与滚动视图的框架没有任何关系,请检查您为滚动视图设置的约束并检查viewWillAppearviewDidAppear中的框架值
  • 删除自动布局后仍然为零。 :(

标签: iphone ios objective-c ipad uiscrollview


【解决方案1】:

在 viewDidLoad 中:视图是从情节提要中加载的,但还没有“正确”的尺寸。要设置/更改尺寸,请改用 viewWillAppear:。

【讨论】:

  • 如果您不使用自动布局,viewDidLoad 中的大小将与 sotryboard/xib 文件中设置的大小完全相同。
  • 如果我应该在viewWillAppear 中进行操作,那么本教程如何工作? (看他写代码的地方,不用看全)youtube.com/…
  • 尝试使用不同的方向(横向与纵向),你会看到;)
【解决方案2】:

不建议访问viewDidLoad is 中的框架属性,因为视图的位置和尺寸尚未固定。您应该在 viewWillAppear: 中执行此操作,您将获得非零值。

【讨论】:

    【解决方案3】:

    如果您在情节提要中使用自动布局,检查UIScrollView 框架的好地方是viewDidLayoutSubviews。在情节提要布置视图之后、viewDidAppear: 之前调用它。在故事板中检查视图的框架时,我发现它比 viewWillAppear: 更可靠。

    方法按以下顺序调用:

    1. viewDidLoad
    2. viewWillAppear:
    3. viewWillLayoutSubviews
    4. viewDidLayoutSubviews
    5. viewDidAppear:

    【讨论】:

    • 有人发布了一个被否决的答案,现在已被删除,但它对我有用——在viewDidLoad 中设置UIScrollView 的框架。你会认为这是一个坏主意吗?为什么?
    • viewDidLoad 中设置UIScrollView 的框架有时可能会起作用,但它会导致不可预知的结果,应该避免。这里有两个 SO 答案很好地解释了为什么不应使用 viewDidLoadherehere
    猜你喜欢
    • 2020-03-11
    • 2014-01-24
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多