具有Autolayout的UIScrollView中的UITableViews

时间:2013-06-10 14:05:18

标签: ios uiscrollview autolayout

我正在尝试在UIScrollView中嵌入UITableViews,iOS6和autolayout。

我在iOS 6之前已经多次使用struts和spring。我将tableviews添加为我的scrollview的子视图,设置了适当的框架和内容大小。它运行得很好,允许用户在tableviews之间滚动,但它不再适用于3.5英寸屏幕和iPhone 5的4英寸屏幕。

滚动视图的高度已正确调整大小,但子视图的高度不正确,并且在4“屏幕下方有一个空白区域。

我在IB中创建了ViewController,添加了一个UIScrollView,然后以编程方式添加了表视图。

我找到了一种解决方法,即在-viewDidAppear方法中设置框架和大小,但它会导致滚动视图闪烁,因为在将viewcontroller呈现给用户之后它已被修改。

我目前正在关注NSLayoutConstraint,目前尚未取得多大成功。

有没有人遇到过同样的问题?

这是我目前的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self composeScrollView];
}

- (void)composeScrollView {
    // set up scrollview
    CGSize scrollViewContentSize = _scrollView.bounds.size;
    scrollViewContentSize.width *= self.tableViewsList.count;
    _scrollView.contentSize = scrollViewContentSize;

    CGPoint contentOffset = _scrollView.bounds.origin;
    contentOffset.x = _scrollView.bounds.size.width * self.tableIndex;
    _scrollView.contentOffset = contentOffset;

    _scrollView.directionalLockEnabled = YES;

    for (int i = 0; i < self.tableViewsList.count; i++) {        
        CGRect tableViewRect = _scrollView.bounds;
        tableViewRect.origin.x = tableViewRect.size.width *i;

        UITableView *tableView = [[UITableView alloc] initWithFrame:tableViewRect style:UITableViewStylePlain];
        tableView.delegate = self;
        tableView.dataSource = self;
        tableView.directionalLockEnabled = YES;

        [_scrollView addSubview:tableView];
    }
}

我在很多iOS应用程序中都看到过这种布局,所以我想这个解决方案对我们很多人都有用。

我想添加图片更明确,但我没有足够的声誉。

1 个答案:

答案 0 :(得分:1)

自动布局尚未在viewDidLoad中设置帧。在viewDidAppear它有,所以现在一切正常。执行此类操作的最佳方法是viewDidLayoutSubviewsviewWillLayoutSubviews