使用XIB和AutoLayout自定义UITableViewHeaderFooterView

时间:2014-04-16 15:43:28

标签: ios uitableview autolayout

我从自定义UITableViewHeaderFooterView收到此错误:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. WYBDetailHeaderView's implementation of -layoutSubviews needs to call super.'

我已经创建了UITableViewHeaderFooterView子类并创建了一个XIB文件,我使用registerNib:forHeaderFooterViewReuseIdentifier:上的UITableView加载了该文件。

由于IB中没有UITableViewHeaderFooterView,我已按照其他帖子中的建议使用了UIViewUITableViewHeaderFooterView in InterfaceBuilder; UITableViewHeaderFooterView with IB)。

我的自定义UITableViewHeaderFooterView使用了AutoLayout并包含两个多行UILabel,我认为问题与这些子视图位于UITableViewHeaderFooterView的事实有关本身而非.contentView。但是我不知道如何使用IB。

这是我的layoutSubviews实施(我尝试了一些没有成功的组合)。当我完全删除这个功能时,我甚至得到了错误:

- (void)layoutSubviews
{
    [super layoutSubviews];
    // Commented out because of infinite loop.
    //  If this was a custom UITableViewCell I would call these methods on self.contentView
    //[self setNeedsLayout];
    //[self layoutIfNeeded];

    self.titleLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.titleLabel.frame);
    self.subtitleLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.subtitleLabel.frame);
}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

试试这个方法:

-(UIView*) tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

然后,在其中加载xib文件。