UIScrollView使用{0,0}处的帧进行初始化,但宽度和高度为{0,0}

时间:2013-07-05 07:44:51

标签: iphone ios objective-c ipad uiscrollview

我创建了一个视图控制器,顶部有一个导航栏,底部是一个标签栏,除了占据中间所有剩余空间的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}}

发生了什么事?

3 个答案:

答案 0 :(得分:3)

在viewDidLoad中:视图从故事板加载,但还没有“正确”的尺寸。要设置/更改尺寸,请使用viewWillAppear:而不是。

答案 1 :(得分:3)

由于视图的位置和尺寸尚未修复,因此不建议访问viewDidLoad is中的框架属性。你应该在viewWillAppear:中进行,你将获得非零值。

答案 2 :(得分:2)

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

按此顺序调用方法:

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