我创建了一个视图控制器,顶部有一个导航栏,底部是一个标签栏,除了占据中间所有剩余空间的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}}
发生了什么事?
答案 0 :(得分:3)
在viewDidLoad中:视图从故事板加载,但还没有“正确”的尺寸。要设置/更改尺寸,请使用viewWillAppear:而不是。
答案 1 :(得分:3)
由于视图的位置和尺寸尚未修复,因此不建议访问viewDidLoad is
中的框架属性。你应该在viewWillAppear:
中进行,你将获得非零值。
答案 2 :(得分:2)
如果您在故事板中使用自动布局,则检查UIScrollView
框架的好地方位于viewDidLayoutSubviews
。在故事板布置视图之后但在viewDidAppear:
之前调用它。在检查故事板中视图的帧时,我发现它比viewWillAppear:
更可靠。
按此顺序调用方法: