我在Storyboard中添加了一个Scroll View,并在Storyboard中设置了自动布局属性。所以很明显它在不同的iPhone上需要不同尺寸,这就是我想要的。现在我想在Scroll View中添加两个子视图,每个子视图都占据Scroll View的整个可见区域并启用分页。因此,在任何时间点都可以看到其中一个子视图,您可以向左或向右滑动以查看其他子视图。
我的问题是,因为我在程序中创建这两个视图,我不确定我应该在哪里设置子视图帧。这是我现在正在做的,在viewDidLayoutSubviews中,但理想情况下我想在viewDidload中执行此操作,但在viewDidLoad中框架尚未设置:
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) UIView *pageOne;
@property (nonatomic, strong) UIView *pageTwo;
@end
- (void) viewDidLayoutSubviews
{
self.scrollView.pagingEnabled = YES;
self.pageOne = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height)];
self.pageOne.backgroundColor = [UIColor redColor];
[self.scrollView addSubview:self.pageOne];
self.pageTwo = [[UIView alloc] initWithFrame: CGRectMake(self.scrollView.bounds.size.width, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height)];
self.pageTwo.backgroundColor = [UIColor blueColor];
[self.scrollView addSubview:self.pageTwo];
self.statsScrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width * 2, self.scrollView.bounds.size.height);
}
所以,我的问题是,如果我在程序中创建的视图(上面的pageOne和pageTwo)是指在Storyboard中设置的视图框架,其大小是自动布局,我应该在哪里设置代码。我知道我的代码有多次被执行的问题,这不是我想要的。
答案 0 :(得分:0)
您必须等到实际布局完成才能抓住框架,因此viewDidLayoutSubviews
是一个不错的选择。如果您想确保页面只添加一次,您可以简单地检查它们之前是否已经初始化,如下所示:
if (!self.pageOne) {
self.pageOne = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height)];
self.pageOne.backgroundColor = [UIColor redColor];
[self.scrollView addSubview:self.pageOne];
}
当然,您也可以使用CGRectZero框架初始化viewDidLoad
- 方法中的页面并将其添加为子视图,然后在以后设置正确的框架,即:
viewDidLoad
:
self.pageOne = [[UIView alloc] initWithFrame: CGRectZero];
self.pageOne.backgroundColor = [UIColor redColor];
[self.scrollView addSubview:self.pageOne];
viewDidLayoutSubviews
:
self.pageOne.frame = CGRectMake(0, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height);