uitableview中的所有节标题都位于同一位置

时间:2014-09-22 20:01:13

标签: ios objective-c uitableview

我有一个自定义UIView,我希望能够在整个应用程序中重用它作为tableviews中的节头。以下是适用的代码(基本上就是这样做):

-(id) initWithTitle:(NSString *)title{
    self = [super init];
    if(self){
        _title = title;
        self.translatesAutoresizingMaskIntoConstraints = false;
        [self addSubview:self.titleLabel];
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-%@-[_titleLabel]-%@-|", HORIZONTAL_SPACE, HORIZONTAL_SPACE] options:0 metrics:nil views:NSDictionaryOfVariableBindings(self, _titleLabel)]];
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:|-%@-[_titleLabel]-%@-|", VERTICAL_SPACE, VERTICAL_SPACE] options:0 metrics:nil views:NSDictionaryOfVariableBindings(self, _titleLabel)]];
        [self updateConstraintsIfNeeded];
    }
    return self; 
}

我正在使用它:

- (UIView*)tableView:(UITableView*)tableView
viewForHeaderInSection:(NSInteger)section
{
    NSString *headerText = _headers[section];
    if(headerText.length){
        AWSmallTextSectionHeader *header = [[AWSmallTextSectionHeader alloc] initWithTitle:headerText];
        return header;
    }
    return [UIView new];
}

问题在于,当视图绘制到屏幕时,它们都从相同的原点开始......这就像在tableview的顶部看起来的那样:

overlapping section headers

它真的很奇怪,因为它的行为好像它在正确的部分,例如,如果你开始滚动并且其中一个部分离开屏幕,那么对应于该部分标题的视图将消失。

我觉得这与我添加约束的方式有关,但我不确定。

由于

修改(这也已实施)

- (CGFloat)tableView:(UITableView*)tableView
    heightForHeaderInSection:(NSInteger)section
{
    if (section == SECTION_INDEX_PHONE) {
        return  60.f; //CGRectGetHeight(self.phoneSectionHeader.frame);
    } else if (section == SECTION_INDEX_FEEDBACK) {
        return 40.f; //CGRectGetHeight(self.feedbackSectionHeader.frame);
    }
return 5.0;
}

2 个答案:

答案 0 :(得分:1)

您是否应该在某个时候设置标题部分视图的界限?

还要确保您正在调整heightForHeaderInSection:

This method only works correctly when tableView:heightForHeaderInSection: is also implemented. 

答案 1 :(得分:1)

self.translatesAutoresizingMaskIntoConstraints = false;是问题所在。

一旦我摆脱它正常工作。