UITableViewCell 的 xib 行为真的很奇怪
UITableViewCell's xib acting really strange
我很抱歉标题含糊不清,但我找不到合适的词来描述它。
我有这个 xib,它包含一个 UITableViewCell,UITableView 有一个子视图(这是一个简单的 UIView)。自动布局已关闭。 UITableViewCell 及其子视图的宽度相同:320。子视图的 x 和 y 均为 0。
subView的autoResizingMask是这样的:
在iPhone6模拟器上,UITableViewCell和它的contentView的宽度都是375,但是subView的宽度变成了695。
我像这样初始化了 UITableViewCell:
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (cell == nil) {
cell = [[sBundle loadNibNamed:nibName owner:nil options:nil] lastObject];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
cell.width = kScreenWidth;
}
然后我什么也没做,也没有对子视图做任何事情。我什至没有子视图的 IBOutlet。
当我把subView的autoResizing改成这样的时候,问题就消失了:
在iPhone6模拟器上,子视图的宽度是375,这是应该的。
然后我改成这样:
在模拟器上,子视图的宽度缩小到125.5。
当我打开 xib 作为源代码时,最奇怪的事情发生了。我看不出有什么问题。
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="BdK-FL-moU" customClass="SProductDetailTagCell">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="BdK-FL-moU" id="BjX-yQ-6aR">
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" id="KEc-b0-BoQ">
<rect key="frame" x="0.0" y="0.0" width="320" height="8"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="0.96078431369999995" green="0.96078431369999995" blue="0.96078431369999995" alpha="1" colorSpace="calibratedRGB"/>
</tableViewCellContentView>
<point key="canvasLocation" x="139" y="402"/>
</tableViewCell>
我没有做任何改变。
但是当我再次在 Interface Builder 中打开 xib 时,subView 的宽度发生了变化!
我发现它的变化方式与它在模拟器上的变化方式相同:当自动调整大小就像第一个屏幕截图一样,它会展开。当像第二个屏幕截图时,它会保留。像第三张截图时,它缩小了。
我尝试删除 xib 并创建一个新的,但行为保持不变。它让我疯狂。有什么建议么? :(
最后我发现问题可能是我的项目有问题,并且 xib 是使用单元格的 .h 和 .m 文件单独创建的。
我通过删除 xib 并删除 UITableViewCell 的 .h 和 .m 解决了这个问题。然后我新建了一个UITableViewCell的子类,创建的时候勾选了"Also create xib file"。通过将所有代码复制回来,并绘制与旧 xib 完全相同的新 xib,问题就迎刃而解了。
我很抱歉标题含糊不清,但我找不到合适的词来描述它。
我有这个 xib,它包含一个 UITableViewCell,UITableView 有一个子视图(这是一个简单的 UIView)。自动布局已关闭。 UITableViewCell 及其子视图的宽度相同:320。子视图的 x 和 y 均为 0。
subView的autoResizingMask是这样的:
在iPhone6模拟器上,UITableViewCell和它的contentView的宽度都是375,但是subView的宽度变成了695。
我像这样初始化了 UITableViewCell:
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (cell == nil) {
cell = [[sBundle loadNibNamed:nibName owner:nil options:nil] lastObject];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
cell.width = kScreenWidth;
}
然后我什么也没做,也没有对子视图做任何事情。我什至没有子视图的 IBOutlet。
当我把subView的autoResizing改成这样的时候,问题就消失了:
在iPhone6模拟器上,子视图的宽度是375,这是应该的。
然后我改成这样:
在模拟器上,子视图的宽度缩小到125.5。
当我打开 xib 作为源代码时,最奇怪的事情发生了。我看不出有什么问题。
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="BdK-FL-moU" customClass="SProductDetailTagCell">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="BdK-FL-moU" id="BjX-yQ-6aR">
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" id="KEc-b0-BoQ">
<rect key="frame" x="0.0" y="0.0" width="320" height="8"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" red="0.96078431369999995" green="0.96078431369999995" blue="0.96078431369999995" alpha="1" colorSpace="calibratedRGB"/>
</tableViewCellContentView>
<point key="canvasLocation" x="139" y="402"/>
</tableViewCell>
我没有做任何改变。
但是当我再次在 Interface Builder 中打开 xib 时,subView 的宽度发生了变化!
我发现它的变化方式与它在模拟器上的变化方式相同:当自动调整大小就像第一个屏幕截图一样,它会展开。当像第二个屏幕截图时,它会保留。像第三张截图时,它缩小了。
我尝试删除 xib 并创建一个新的,但行为保持不变。它让我疯狂。有什么建议么? :(
最后我发现问题可能是我的项目有问题,并且 xib 是使用单元格的 .h 和 .m 文件单独创建的。
我通过删除 xib 并删除 UITableViewCell 的 .h 和 .m 解决了这个问题。然后我新建了一个UITableViewCell的子类,创建的时候勾选了"Also create xib file"。通过将所有代码复制回来,并绘制与旧 xib 完全相同的新 xib,问题就迎刃而解了。