调整 UITableViewCell 大小的 NSLayoutConstraint 错误
Posted
技术标签:
【中文标题】调整 UITableViewCell 大小的 NSLayoutConstraint 错误【英文标题】:NSLayoutConstraint errors with resizing UITableViewCell 【发布时间】:2014-01-28 20:37:23 【问题描述】:我有一个自定义 UITableViewCell,它带有一个使用自动布局调整大小的子视图。该子视图是单元格底部的工具栏。当单元格未被选中时,它的高度为零,并在选中状态下增长到 30。单元格在 100 和 130 之间切换。
这里是初始化:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
_toolbarView = [[FOToolbarView alloc] init];
_toolbarView.translatesAutoresizingMaskIntoConstraints = NO;
_toolbarView.backgroundColor = [UIColor blueColor];
[self.contentView addSubview: _toolbarView];
[self setNeedsUpdateConstraints];
return self;
这里有限制
- (void)updateConstraints
[self.contentView addConstraint: [NSLayoutConstraint constraintWithItem: _toolbarView
attribute: NSLayoutAttributeWidth
relatedBy: NSLayoutRelationEqual
toItem: self.contentView
attribute: NSLayoutAttributeWidth
multiplier: 1.0
constant: 0]];
[self.contentView addConstraint: [NSLayoutConstraint constraintWithItem: _toolbarView
attribute: NSLayoutAttributeLeft
relatedBy: NSLayoutRelationEqual
toItem: self.contentView
attribute: NSLayoutAttributeLeft
multiplier: 1.0
constant: 0]];
[self.contentView addConstraint: [NSLayoutConstraint constraintWithItem: _toolbarView
attribute: NSLayoutAttributeTop
relatedBy: NSLayoutRelationEqual
toItem: self.contentView
attribute: NSLayoutAttributeTop
multiplier: 0.0
constant: 100.0]];
[self.contentView addConstraint: [NSLayoutConstraint constraintWithItem: _toolbarView
attribute: NSLayoutAttributeBottom
relatedBy: NSLayoutRelationEqual
toItem: self.contentView
attribute: NSLayoutAttributeBottom
multiplier: 1.0
constant: 0]];
[super updateConstraints];
布局按预期工作,但出现以下错误:
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x1f810f50 FOToolbarView:0x1f812900.top == + 70>",
"<NSLayoutConstraint:0x1f810dc0 FOToolbarView:0x1f812900.bottom == UITableViewCellContentView:0x1f8286d0.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0x1f821230 h=--& v=--& V: [UITableViewCellContentView:0x1f8286d0(69)]>"
)
我尝试了很多东西,但都没有成功。我怎样才能摆脱这个错误?
【问题讨论】:
【参考方案1】:问题似乎是系统自动添加了来自 tableviewcell.contentview 的 autoresizingmask 约束。试试这个:
self.contentView.translatesAutoresizingMaskIntoConstraints = NO;
【讨论】:
这行得通。然后我只需要在 updateConstraints 中为 contentView 添加约束,这样它就会随着单元格展开。以上是关于调整 UITableViewCell 大小的 NSLayoutConstraint 错误的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UITableViewCell 根据屏幕大小调整大小
调整 UITableViewCell 大小的 NSLayoutConstraint 错误
根据内容可用性调整 UITableViewCell 的大小作为响应
iOS - UITableViewCell 图像调整/调整大小