如何使UIScrollView与Autolayout和动态内容一起使用?

时间:2015-12-16 11:14:21

标签: ios uitableview uiscrollview autolayout

我在xib文件中有这个视图层次结构:

  • UIView
  • UIScrollView
    • UIView
      • UIView
      • UITableView
  • UIButton

contentView UIView作为UIScrollView的直接子女。我已设置其顶部,底部,前导和尾随约束来固定滚动视图。然后,由于我在运行时填充表格视图并且我事先并不知道它的高度,因此我在代码中设置了滚动视图contentSize

[self.scrollView setContentSize:CGSizeMake(self.contentView.frame.size.width, self.tableView.frame.size.height)];

但我不能做这项工作......我能错过什么?

5 个答案:

答案 0 :(得分:2)

AppsDev,查看此视频,它通过故事板帮助我做了很多UIScrollView https://www.youtube.com/watch?v=UnQsFlMGDsI

也永远不会设置scrollView的contentSize,因为已经由scrollView自行决定,这就是为什么我们有AutoLayout。

我认为我们应该为uiscrollview-autolayout

添加一个标签

答案 1 :(得分:0)

不要手动设置内容大小。相反,

  1. contentView的四条边限制在scrollView的边缘。
  2. contentView的宽度限制为等于scrollView的宽度。 (这样可以防止内容比scrollView更宽。)
  3. contentView的顶部和侧面约束到子视图的相应边缘。
  4. contentView's边和底部限制在tableView的边和底部。
  5. 现在,它变得棘手:将子视图的底部约束为等于表视图的顶部。但是,除非您在子视图上明确设置了高度约束,否则您将得到一个布局错误,即scrollView内容的高度将不明确。要解决这个问题,您可以设置子项占位符高度以使Interface Builder满意,但是您还必须在运行时将其高度设置为某个位置。
  6. 现在你应该被设定。 scrollView现在可以通过检查约束层次来计算其内容的完整高度和宽度,并且您不必手动设置其内容高度。

答案 2 :(得分:0)

我终于按照@Sana答案和this post设法完成了这项工作,以便能够滚动表格视图内容。

谢谢大家回复。

答案 3 :(得分:-1)

仅举例:

UIView *containerView               = [[UIView alloc] init];
    UIScrollView *scrollView            = [[UIScrollView alloc] init];
    [containerView addSubview:scrollView];

    containerView.translatesAutoresizingMaskIntoConstraints = NO;
    scrollView.translatesAutoresizingMaskIntoConstraints    = NO;
    NSDictionary *viewsDictionary       = NSDictionaryOfVariableBindings(containerView, scrollView);

    [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"
                                                                          options:kNilOptions
                                                                          metrics:nil
                                                                            views:viewsDictionary]];
    [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|"
                                                                          options:kNilOptions
                                                                          metrics:nil
                                                            views:viewsDictionary]];

答案 4 :(得分:-1)

使用此代码我的代码可以帮助您。

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
   [self.scrollView setContentSize:CGSizeMake(self.contentView.frame.size.width, self.tableView.frame.size.height)];
}