仅使用autolayout(无initwithframe),为UITableViewCell配置accessoryview按钮

时间:2014-11-08 00:50:03

标签: ios cocoa-touch autolayout uikit

我发现了很多关于此的问题,但它们都使用了initWithFrame。有没有办法严格使用autolayout?

我尝试将附件视图设置为按钮并向单元格添加约束,并将按钮添加为附件视图的子视图并向附件视图添加约束。这是我最有希望的尝试:

button.translatesAutoresizingMaskIntoConstraints = NO;
cell.accessoryView.translatesAutoresizingMaskIntoConstraints = NO;
[cell.accessoryView addSubview:button];
NSDictionary *varDict = NSDictionaryOfVariableBindings(button);
[cell.accessoryView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[button]|" options:0 metrics:nil views:varDict]];
[cell.accessoryView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[button]|" options:0 metrics:nil views:varDict]];

它一直告诉我它无法解析约束,因为相关视图没有超视图。我打电话给addSubview!发生了什么事?

2 个答案:

答案 0 :(得分:2)

您可能不希望禁用translatesAutoresizingMaskIntoConstraints的{​​{1}},因为您希望将cell.accessoryView的布局保留在accessoryView内,对吧?如果是,您应该删除此行:

cell

答案 1 :(得分:0)

我不知道您是否可以将按钮添加为附件视图的子视图。 但我已将按钮设置为附件视图,之后,我在按钮上调用了sizeToFit。它对我有用。

UIButton *button = [[UIButton alloc] init];
[button setTitle: @"title" forState:UIControlStateNormal];
cell.accessoryview = button;
[button sizeToFit];

Swift版本:

var button = UIButton()
button.setTitle("title", forState: UIControlState.Normal)
cell.accessoryview = button
button.sizeToFit()

希望这会对某人有所帮助。