在UIScrollView内以编程方式调整UITableView的大小,并避免AutoLayout约束

Alb*_*lla 6 resize uitableview uiscrollview ios autolayout

我有一个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)];

} 
Run Code Online (Sandbox Code Playgroud)

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

- (void) viewDidAppear:(BOOL)animated {
    [self resizeViews];
}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免这种情况发生?

我很确定问题是具有UITableView的约束.

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

在此先感谢您的帮助.

(抱歉,我无法发布图片)

Sel*_*kie 0

我今天遇到了同样的问题。正如您所怀疑的,这是自动布局的问题。我现在不知道如何正确解决它。但如果你禁用自动布局,那就没问题了。为此,您可以打开 XIB 文件选择“文件检查器”选项卡,然后取消选中“使用自动布局”