gpt4 book ai didi

ios - 在调用 reloadData 之前,Autolayout 会错误地调整 UITableViewCells 的大小

转载 作者:可可西里 更新时间:2023-11-01 02:59:43 25 4
gpt4 key购买 nike

我有一个 tableview 单元格,它的 View 是从 nib 加载的,它的 subview 使用 AutoLayout 进行约束。我正在使用 iOS 8 的自动调整单元格功能。在第一次显示时,单元格看起来像这样:

Too much margin.

绿色 View 与蓝色和灰色 View 之间的边距比我预期的要大。如果我向下 ScrollView 以便创建更多单元格,或者如果我在 tableview 上调用 reloadData,那么我会得到正确的结果:

Just right.

就好像单元格 subview 的大小直到第二次布局传递才正确。我该如何解决这个问题?我看到一些帖子建议在 layoutSubviews 中设置 setPreferredMaxLayoutWidth,如下所示:

-(void)layoutSubviews
{
[super layoutSubviews];
[self.redLabel setPreferredMaxLayoutWidth:[self.titleLabel bounds].size.width];
[self.greenLabel setPreferredMaxLayoutWidth:[self.extendedLabel bounds].size.width];
[self.blueLabel setPreferredMaxLayoutWidth:[self.dateLabel bounds].size.width];
[self.grayLabel setPreferredMaxLayoutWidth:[self.tagsLabel bounds].size.width];
[super layoutSubviews];
}

……不过好像没什么效果。

我的约束似乎没有任何歧义,但由于它们是在 .nib 中设置的,所以我不确定如何将它们发布在这里。


编辑 1:

所以我将蓝色/灰色 View 的顶部空间设置为 >= 绿色 View 的底部,+3。这实际上是我得到的,因为空间更大。

但是,如果我将关系设置为 ==,则会出现不同的视觉错误,其中红色标签的大小与其包含的文本量不符: enter image description here


编辑2:

不确定我是否应该开始一个新问题,但这是同一个问题。

在编辑 1 中仍然反复出现布局问题。除了视觉问题外,当我的表格 View 中的单个单元格发生变化时,它会造成可怕的影响。整个列表似乎会折叠并重新加载。此外,我还记录了以下自动布局错误:

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:0x797c5bc0 UITableViewCellContentView:0x7970adc0.(null) == UILabel:0x79707cf0.trailing + 6>",
"<NSLayoutConstraint:0x7977b560 UILabel:0x79707cf0.leading == UITableViewCellContentView:0x7970adc0.(null) + 6>",
"<NSLayoutConstraint:0x7970a700 UITableViewCellContentView:0x7970adc0.width ==>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x797c5bc0 UITableViewCellContentView:0x7970adc0.(null) == UILabel:0x79707cf0.trailing + 6>

UILabel 指的是较长的绿色标签。似乎它无法将前导和尾随约束与单元格的宽度相协调,就好像单元格总体上小于 12 点一样。然而,注销宽度似乎总是 320。

最佳答案

只是补充一下,因为大多数人提出的建议对我不起作用,下面是我修复它的方法(适用于 iOS 8)。我将 XIB 用于细胞,但这应该是通用的。

首先,UILabel 上有一个错误,其中“-(void)layoutSubviews”未被调用,因此您无法真正让 iOS 7.0 解决方案适用于 iOS 8。因此,我使用自动调整单元格大小iOS 8。

但是,上述错误正在发生。我必须重新加载表格 View 以使单元格正确。如果您查看那里的教程和示例,那里有很多工作正常,而其他人则提示存在错误。我一直在寻找错误示例和正确示例之间的共同点,错误是:size-classes.

不要使用“compact-width”和“any-height”,而是使用“any-any”。使用“any-any”解决了所有问题,一切都按预期工作。听起来很荒谬,但试试吧!

关于ios - 在调用 reloadData 之前,Autolayout 会错误地调整 UITableViewCells 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25963327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com