我有一个自定义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的顶部看起来的那样:
它真的很奇怪,因为它的行为好像它在正确的部分,例如,如果你开始滚动并且其中一个部分离开屏幕,那么对应于该部分标题的视图将消失。
我觉得这与我添加约束的方式有关,但我不确定。
由于
修改(这也已实施)
- (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;
}
答案 0 :(得分:1)
您是否应该在某个时候设置标题部分视图的界限?
还要确保您正在调整heightForHeaderInSection:
This method only works correctly when tableView:heightForHeaderInSection: is also implemented.
答案 1 :(得分:1)
self.translatesAutoresizingMaskIntoConstraints = false;
是问题所在。
一旦我摆脱它正常工作。