6

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

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

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

查看下一张图片:http ://d.pr/i/rKzb

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

http://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 时提出解决方案来防止这种情况发生。

在此先感谢您的帮助。

(抱歉我不能发图片)

4

3 回答 3

0

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

    [self.scrollView setContentOffset:CGPointZero animated:NO];
于 2014-05-10T20:55:48.360 回答
0

我今天遇到了同样的问题。正如您所怀疑的,这是 AutoLayout 问题。我现在不确定如何正确解决它。但是,如果您禁用 AutoLayout,那就没问题了。为此,您可以打开 XIB 文件选择 File Inspector 选项卡,然后取消选中 Use AutoLayout

于 2013-01-17T21:31:25.227 回答
0

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

请参阅这篇文章动态更改 UITableView 高度

于 2013-04-13T03:04:33.607 回答