UITableViewCell 中的 UIImageView 用不同的约束刷新
Posted
技术标签:
【中文标题】UITableViewCell 中的 UIImageView 用不同的约束刷新【英文标题】:UIImageView in UITableViewCell refreshing with different constraints 【发布时间】:2014-09-19 00:06:41 【问题描述】:这个问题让我困扰了一段时间,我终生无法明白为什么会发生。
我有一个 tableView,里面有自定义单元格。该单元格在左上角有一个 imageView,然后是从 plist 中查找的各种信息。我正在使用自动布局来设置所有元素的位置。我已经刷新了所有的约束,所以它们都被更新了。见下文:
当我向下滚动视图并且单元格离开屏幕时,就会出现问题。我正在对它们进行出队,因此每次它们都会刷新。
BSettingsCell * cell = [tableView_ dequeueReusableCellWithIdentifier:bSettingsCellIdentifier];
当它们刷新时,尽管它们现在绑定的约束不起作用。 imageview 为 60x60 像素,图像为 120x120 像素,命名为 fruitMainImage@2x.png 以考虑视网膜屏幕。
我在图片周围设置了一个红色边框,以便更容易看到正在发生的事情。如您所见,图像在刷新后由于某种原因向下移动。
我已尝试切换到框架布局以将其固定到位,但这不起作用。
我发现this*** 问题似乎提出了同样的问题,但只是将其作为一个问题提出,而不是帮助解决这个问题。
任何帮助将不胜感激,因为如果有简单的修复方法,我不喜欢用 keeplayout 重写所有代码。
编辑:
这是我的 cellForRowAtIndex 方法:
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath
BSettingsCell * cell = [tableView_ dequeueReusableCellWithIdentifier:bSettingsCellIdentifier];
NSDictionary * dict = [_settingsData objectForKey:_settingsPacks[indexPath.row]];
cell.nameLabel.text = [dict objectForKey:bSettingsName];
cell.byLabel.text = [dict objectForKey:bArtist];
cell.stickerImageView.image = [UIImage imageNamed:[dict objectForKey:bImage]];
// To make it obvious that the view is changing position
cell.stickerImageView.layer.borderColor = [UIColor redColor].CGColor;
cell.stickerImageView.layer.borderWidth = 2;
cell.descriptionView.text = [dict objectForKey:bDescription];
[cell.linkButton setTitle: [dict objectForKey:bLink] forState: UIControlStateNormal];
cell.linkButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
还有一张 XIB 文件中自动布局约束的照片:(请注意,虽然屏幕截图中没有包含名称和标签,但与约束保持一致)
【问题讨论】:
图像视图的顶部空间和前导空间是否指向其父视图? 那么,您是说您的图像视图的属性名称不是 imageView (这是您提供的链接中提到的问题)? 是的,超级视图的顶部空间是 8,超级视图的前导空间是 6。这两个和宽度和高度等于 60 是四个约束 @property (nonatomic, weak) IBOutlet UIImageView *stickerImageView; 我在您发布的内容中看不到任何可能导致此问题的内容。也许发布你的整个 cellForRowAtIndexPath 方法。 【参考方案1】:你试过用吗
BSettingsCell * cell = [tableView_ dequeueReusableCellWithIdentifier:bSettingsCellIdentifier forIndexPath: indexPath];
改为?
【讨论】:
这似乎没有任何区别【参考方案2】:虽然解决方案很普通,但它确实对我有帮助,所以我会在这里发布。
基本上解决方案是删除我所做的并在每个步骤中添加它。尽管最后它看起来完全一样,但它确实有效。我认为有时会有 bug 潜入 Xcode 并导致问题。通常只需重置工作即可解决这些问题。
当我试图解决这个问题时,我假设错误出现在我的代码中,我可能花了太长时间试图找到错误。最后花几分钟重做 a) 通常可以让您看到错误,因为您可以看到错误的步骤 b) 它可以重置由 Xcode 引起的任何错误。
希望这对以后遇到类似挫折的人有所帮助
【讨论】:
以上是关于UITableViewCell 中的 UIImageView 用不同的约束刷新的主要内容,如果未能解决你的问题,请参考以下文章
Xcode (Swift) 中的 UI:我只想要 UIStackView 的折叠功能,而不是标准化间距。还值得用吗?
UITableViewCell 中的 UIDatePicker 更新 UITableViewCell 文本标签
更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象