【问题标题】:UITableViewCell's xib acting really strangeUITableViewCell 的 xib 表现得很奇怪
【发布时间】:2015-02-27 13:19:08
【问题描述】:

对于这个模棱两可的标题,我很抱歉,但我就是找不到合适的词来描述它。

我有这个 xib,它包含一个 UITableViewCell,UITableView 有一个 subView(这是一个简单的 UIView)。自动布局已关闭。 UITableViewCell 和它的 subView 的宽度相同:320。subView 的 x 和 y 都是 0。

subView的autoResizingMask是这样的:

在 iPhone 6 模拟器上,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;
}

然后我没有对它做任何事情,对 subView 也没有做任何事情。我什至没有子视图的 IBOutlet。

当我把 subView 的 autoResizing 改成这个后,问题就消失了:

在 iPhone 6 模拟器上,子视图的宽度应该是 375。

然后我改成这样:

在模拟器上,subView 的宽度缩小到 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 并创建一个新的,但行为保持不变。它让我疯狂。有什么建议么? :(

【问题讨论】:

    标签: ios uitableview xib


    【解决方案1】:

    最后我发现问题可能是我的项目有问题,并且 xib 是使用单元格的 .h 和 .m 文件单独创建的。

    我通过删除 xib 并删除 UITableViewCell 的 .h 和 .m 解决了这个问题。然后我创建了一个新的 UITableViewCell 子类,创建时选中了“也创建 xib 文件”。通过将所有代码复制回来,并将新的 xib 与旧的完全相同,问题就消失了。

    【讨论】:

      猜你喜欢
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      相关资源
      最近更新 更多