在UIScrollView中以编程方式调整UITableView的大小,并避免自动布局约束



我有一个UIScrollView,里面包含一些组件。其中一个控件是UITableView,用于显示电影的时间表列表,最多约为7行。

我将UITableView设置为不允许任何类型的移动,并通过编程更改其大小以适应其内容,还增加了UIScrollView的内容大小,使其可以平滑滚动。

一旦视图显示在屏幕上,调整大小就可以正常工作,但当我滚动UIScrollView查看下面时,UITableView会返回到以前的大小。

请参阅下一张图片:http://d.pr/i/rKzb

我使用Storyboard AutoLayout来设计界面,UITableView有以下限制:

https://i.stack.imgur.com/GowOG.png

以下是我调整控件大小的方法:

- (void) resizeViews {
//
// Synopsis
//
CGRect synopsisNewFrame = [Utilities adjustLabel:_movieSynopsis frameForText:_movieSynopsis.text];
[_movieSynopsis setFrame:  synopsisNewFrame];

//
// Schedules
//
CGRect schedulesNewFrame = CGRectMake(self.tableView.frame.origin.x,
_movieSynopsis.frame.origin.y + _movieSynopsis.frame.size.height + 4,
self.tableView.frame.size.width,
self.tableView.contentSize.height);
[self.tableView setFrame: schedulesNewFrame];
//
// Scroll View
//
CGSize scrollSize = CGSizeMake(292, self.tableView.frame.origin.y + self.tableView.frame.size.height + 10);
[_scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
[_tableView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.tableView setContentSize: scrollSize];
[self.tableView setContentOffset:CGPointMake(0, 0)];
} 

这里是我调用resizeView(在ViewController中)的地方:

- (void) viewDidAppear:(BOOL)animated {
[self resizeViews];
}

有什么办法可以避免这种情况发生吗?

我确信问题出在UITableView的约束上。

让我建议在使用AutoLayout时防止这种情况发生的解决方案。

提前感谢您的帮助。

(对不起,我不能发布图片)

我今天遇到了同样的问题。正如您所怀疑的,这是自动布局问题。我现在不知道该怎么解决。但是,如果禁用"自动布局",也可以。为此,您可以打开XIB文件,选择"文件检查器"选项卡,然后在使用自动布局之前删除检查

由于使用了AutoLayout,因此需要调整高度约束。

请参阅本文更改UITableView高度动态

如果您想设置与您在情节提要中所做内容相匹配的滚动视图的contentSize,请在您的视图中执行此操作。

[self.scrollView setContentOffset:CGPointZero animated:NO];

最新更新