我正在尝试以编程方式将标签添加到表格视图单元格的右上角。
[label addConstraint:[NSLayoutConstraint
constraintWithItem:label
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:cell
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:0]];
这给出了一个错误,说我引用了视图子树之外的东西,我猜是单元格本身?顶部和右侧是否需要两个单独的约束?
我更喜欢用约束来做正确的事情,但是我也尝试过手动获取单元格宽度来更改标签的位置。如果用户旋转设备,我将不得不在方向更改方法中添加代码的副本。如果我不能使用约束,我愿意这样做,但我无法获得单元格的正确宽度,这就是我尝试过的。
[label setFrame:CGRectMake(cell.frame.size.width-318, 10, 308, 30)];
似乎cell.frame.size.width
没有得到正确的单元格宽度。
编辑:我计算出单元格宽度是相对于其中的内容的,所以我更改了上面的行以获取tableView.frame.size.width
完成这项工作的整个 tableView 的 with。我仍然想得到一些关于约束的反馈,看看这是否可能。
编辑:这就是我设置单元格和标签的方式......
NSString *cellId = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
}
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(10, 10, 308, 30)];
label.text = @"Whatever text";
// Contraint added here
[cell.contentView addSubview: label];
编辑: `感谢@frozendevil
只是为了显示我在应用正确约束后用来设置标签宽度的最终代码......
[cell.contentView addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:200]];