滚动ViewController内容

时间:2014-05-18 16:05:23

标签: ios objective-c uitableview uiscrollview

视图控制器视图中包含的内容是:

  1. 固定高度的图像
  2. 标签很少
  3. 包含n行的表视图。
  4. 一旦渲染,我希望此处的所有内容都在滚动视图内,以便用户可以根据需要滚动整个屏幕。请注意,scrollView需要扩展到tableView的整个大小才能显示其完整内容。我已尝试过不同的方法,但无法做到这一点。我会很感激任何指针或代码段来完成这项工作。

1 个答案:

答案 0 :(得分:0)

基本上有两种方法可以做到。

tableHeaderView

第一种方法涉及您拥有的tableHeaderView实例的UITableView属性。您只需添加带有约束/ frame / autoresizingMask的UITableView即可将其全屏显示。完成后,您只需(即在您的viewDidLoad中):

UIView *headerView = [UIView new];

// Here I am supposing that you have a 200pt high view and a `self.tableView` UITableView
headerView.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 200.0);

UIImageView *fixedImageView = [UIImageView new];
// configure your imageView..
[headerView addSubview:fixedImageView];

// configure labels as you want and add them to headerView as subviews

// Now set `UITableView` headerView
self.tableView.tableHeaderView = headerView;

如果您想对tableHeaderView使用AutoLayout,建议您查看this question

动态scrollView

另一种方法是创建一个UIScrollView,将所有内容放入其中,然后滚动它。这种方法的缺点是,如果您使用UITableView的浮动节标题,由于tableView将保持已修复,它们不会浮动,而父scrollView将要滚动。

另一方面,由于您可以轻松使用约束,因此这种方法更适合AutoLayout友好。

为此,您开始在视图中添加UIScrollView,并将所有其他视图放入其中。 请务必在scrollView(我认为UIImageView)和scrollView顶部以及最后一个视图之间的第一个视图之间添加垂直间距约束(我认为UITableView)和scrollView底部,以避免模糊的内容大小。

你应该有类似的东西(为了简洁我省略了标签):

UITableView Autolayout inside scrollView

  

请注意,每个视图都在父UIScrollView

之后,向tableView添加高度约束,并在视图控制器子类中添加IBOutlet,例如:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *tableViewHeightConstraint;

现在您只需要配置此约束以反映tableView自然高度,由其行等给出。为此,您只需以这种方式计算高度:

// Resize TableView
CGFloat height = self.tableView.contentSize.height;
self.tableViewHeightConstraint.constant = height;

现在tableView将调整大小,由于其约束,它将调整父scrollView contentSize。

请务必在重新加载UITableView dataSource时刷新此高度约束。