我有一个使用CoreData的Master-Detail应用程序。一切都很好,并按预期工作。添加新条目时,显示只有一个问题。 左边是带有条目的Master's TableView,右边是Detail的视图,用户在其中输入新信息。
我有一个自定义UITableViewCell
来处理格式化。新条目的titleLabel
由约束正确定位。然而detailTextLabel
似乎并不关心约束,只是从单元格的左上角开始(因此在0,0位置),因此位于titleLabel
之上。
我做错了什么?
以下是我自定义UITableViewCell的自定义初始化程序:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier];
if (self) {
self.backgroundColor = [UIColor darkGrayColor];
self.textLabel.font = [Constants mainFontWithSize:16];
self.detailTextLabel.font = [Constants mainFontWithSize:12];
// correct default constraints
self.textLabel.translatesAutoresizingMaskIntoConstraints = NO;
self.detailTextLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-15-[textLabel]-35-|" options:0 metrics:nil views:@{ @"textLabel": self.textLabel }]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-15-[detailTextLabel]-35-|" options:0 metrics:nil views:@{ @"detailTextLabel": self.detailTextLabel }]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-7-[textLabel(19)]-(3)-[detailTextLabel(14)]" options:NSLayoutFormatAlignAllLeft metrics:nil views:@{ @"textLabel": self.textLabel, @"detailTextLabel": self.detailTextLabel }]];
}
return self;
}
由于
答案 0 :(得分:0)
看起来您正在尝试为内置单元格样式的标签添加约束。
之所以不起作用的原因是因为它们是(公共的)内部标签,Apple的代码经过优化,可以在Apple认为不需要标签时从其contentView中删除其标签。 / p>
从超级视图中删除标签时,也会删除约束。之后,当Apple将标签添加到superView时,您添加的约束会影响内置行为,因此其标签现在放错位置。
让Apple自行管理和布局其内置单元格样式,或者使用带有您自己的标签和约束的自定义单元格样式。