2

我创建了一个视图控制器,顶部有一个导航栏,底部有一个标签栏,只有一个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}}

到底是怎么回事?

4

3 回答 3

3

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

于 2013-07-05T07:48:20.533 回答
3

不推荐访问 frame 属性,viewDidLoad is因为视图的位置和尺寸尚未固定。你应该这样做,viewWillAppear:你会得到非零值。

于 2013-07-05T07:48:39.040 回答
2

如果您在情节提要中使用自动布局,那么检查框架的好地方UIScrollViewviewDidLayoutSubviews. 在情节提要布置视图之后,但在viewDidAppear:. 我发现它比viewWillAppear:检查情节提要中的视图框架更可靠。

这些方法按以下顺序调用:

  1. viewDidLoad
  2. 视图将出现:
  3. viewWillLayoutSubviews
  4. viewDidLayoutSubviews
  5. viewDidAppear:
于 2013-07-05T14:10:34.830 回答