使用基于使用自动布局

时间:2015-10-24 23:00:48

标签: ios objective-c iphone uiscrollview ios-autolayout

我在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中设置的视图框架,其大小是自动布局,我应该在哪里设置代码。我知道我的代码有多次被执行的问题,这不是我想要的。

1 个答案:

答案 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);