16

我正在尝试将 UIView 添加到 UITableView 的标题中,然后使用 NSLayoutConstraints 我想给它一个高度。

我浏览了 Apple Docs 和 WWDC 2012 视频,但我在任何地方都找不到这个特定的错误!

我有以下代码:

- (UIImageView *)logoImageView
{
    if (!_logoImageView) {
        _logoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo"]];
        [_logoImageView setTranslatesAutoresizingMaskIntoConstraints:NO];
    }
    return _logoImageView;
}

...在viewDidLoad

UIView *tableHeaderView = [[UIView alloc] init];
tableHeaderView.translatesAutoresizingMaskIntoConstraints = NO;

[tableHeaderView addSubview:self.logoImageView];

[self.tableView setTableHeaderView:tableHeaderView];

NSDictionary *constraintViews = @{@"tableView" : self.tableView, @"tableHeaderView" : tableHeaderView, @"logoImageView" : self.logoImageView};

[self.tableView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[tableHeaderView(50)]"
                                                                       options:0
                                                                       metrics:nil
                                                                         views:constraintViews]];

但是,当我运行它时,我收到以下错误:

2012-10-08 16:31:34.559 myApp[6934:c07] *** Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2372/UIView.m:5776
2012-10-08 16:31:34.561 myApp[6934:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.'
*** First throw call stack:
(0x199b012 0x17c0e7e 0x199ae78 0x1256f35 0x7589ef 0x17d46b0 0x622fc0 0x61733c 0x622eaf 0x7f78cd 0x7401a6 0x73ecbf 0x73ebd9 0x73de34 0x73dc6e 0x73ea29 0x741922 0x7ebfec 0x738bc4 0x738dbf 0x738f55 0x741f67 0x705fcc 0x706fab 0x718315 0x71924b 0x70acf8 0x27e8df9 0x27e8ad0 0x1910bf5 0x1910962 0x1941bb6 0x1940f44 0x1940e1b 0x7067da 0x70865c 0x6d5d 0x2395)
libc++abi.dylib: terminate called throwing an exception
4

4 回答 4

3

当我尝试设置表头视图时,我遇到了同样的异常。当我注意到视图有约束时,我只是取消了情节提要中的“使用自动布局”选项。

截图:http: //i.stack.imgur.com/5jWHy.png

这为我解决了。

于 2013-01-20T20:24:28.757 回答
2

克服这个问题的最好方法是使用 Interface Builder 设置UITableView标题,然后将 Outlet 添加到 height NSLayoutConstraint

于 2013-03-19T15:59:06.780 回答
1

试试这个:

logoImageView.translatesAutoresizingMaskIntoConstraints = YES;

(如果不起作用,请尝试删除:

tableHeaderView.translatesAutoresizingMaskIntoConstraints = NO;  //Remove this line

:)

于 2013-09-23T19:16:06.217 回答
0

我没有为这个问题找到任何适当的解决方案,但您可以通过使用框架来修复它,而不是将 translatesAutoresizingMaskIntoConstraints 属性设置为 No(默认情况下是,所以不要设置它)

CGRect headerViewFrame = CGRectMake(0,0,320,60); //Frame for your header/footer view

UIView *tableHeaderView = [[UIView alloc] initWithFrame:headerViewFrame];
tableHeaderView.translatesAutoresizingMaskIntoConstraints = Yes; //Or don't set it at all
[self.tableView setTableHeaderView:tableHeaderView];
于 2014-07-28T14:22:17.113 回答