我动态地在表格的单元格中的UIImageView
中添加NSLayoutConstraints
(缩略图)和UIView
。我有两个问题。
添加图像视图后,如果用户在此表中插入文本,则仍会显示图像。我的意思是,而不是文本表打印另一个图像。但是,如果我停止并重新运行应用程序,则此时文本将按原样显示。不过,如果我写一个文字图片即将到来。为什么以及我该怎么办?
我设置了图像及其约束:
-(void)setThumbnail:(UIImageView)imageView {
[self.messageView addSubview:imageView];
NSLayoutConstraint *leadingOfThumbnail = [NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.messageView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:8.f];
NSLayoutConstraint *trailingOfThumbnail = [NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.messageView attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-8.f];
NSLayoutConstraint *topOfThumbnail = [NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.messageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:8.f];
NSLayoutConstraint *bottomOfThumbnail = [NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.messageView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-8.f];
[self.messageView addConstraint:leadingOfThumbnail];
[self.messageView addConstraint:trailingOfThumbnail];
[self.messageView addConstraint:topOfThumbnail];
[self.messageView addConstraint:bottomOfThumbnail];
[self.messageView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.messageView removeConstraints:[self.messageTextLabel constraints]];
}
加载时,我遇到约束错误。它说:
2016-10-07 09:35:32.532 application[3733:2922397] 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) (
"NSAutoresizingMaskLayoutConstraint:0x1281474d0 h=--& v=--& UIImageView:0x126d7e020.midY == + 100",
"NSAutoresizingMaskLayoutConstraint:0x128147520 h=--& v=--& V:[UIImageView:0x126d7e020(200)]",
"NSLayoutConstraint:0x126d6c880 V:|-(8)-[UIImageView:0x126d7e020] (Names: '|':UIView:0x1281480d0 )" )
Will attempt to recover by breaking constraint NSLayoutConstraint:0x126d6c880 V:|-(8)-[UIImageView:0x126d7e020] (Names: '|':UIView:0x1281480d0 )
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
我检查过,由我设置的前导和顶部约束导致此错误。他们已经不正确了。我的图像是200 * 200,因此它不需要高度和宽度约束。我只想要消息视图中的8 pt前导,尾随,顶部,底部。有什么问题?
谢谢。
第一个问题的解释编辑:表随机放置UIImageView,多个单元格 - 不应该如此。
答案 0 :(得分:1)
对于第一个问题,您可以在从tableview中出列后将单元格图像设置为nil。
对于第二个问题,在ImageView初始化之后添加此行,以避免将autoresizingmask转换为约束:
imageView.translatesAutoresizingMaskIntoConstraints = false
答案 1 :(得分:1)
您可能希望实现prepareForReuse方法并在那里进行一些清理,将imageView设置为nil并将其从子视图中删除。
当您的单元格出列并且即将在tableview中重复使用时,将调用此方法。
答案 2 :(得分:0)
我相信你的问题是因为dequeCell功能。 UITbableView回收细胞。因此,如果您将图像放在一个单元格中,它可能会出现在另一个单元格中。
要解决此问题,您需要在cellForRowAtIndexPath中添加一些条件。
这些条件会检查您当前单元格或图像中是否需要文本,或两者都是。
如果它只需要文本,则需要从该单元格中删除图像。
如果您仍遇到问题,请分享您的cellForRowAtIndexPath代码。