UITableViewCell的xib表演真的很奇怪

时间:2015-02-27 13:19:09

标签: ios uitableview xib

我很抱歉这个含糊不清的标题,但我找不到合适的词来形容这个。

我有这个xib,它包含一个UITableViewCell,UITableView有一个subView(这是一个简单的UIView)。 AutoLayout已关闭。 UITableViewCell及其子视图具有相同的宽度:320。子视图的x和y均为0.

subView的autoResizingMask是这样的:

ScreenShot1

在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更改为此时,问题就消失了:

enter image description here

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

然后我改变了它:

enter image description here

在模拟器上,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的宽度只会改变!

enter image description here

我发现它的变化方式与它在模拟器上的变化方式相同:当自动调整类似于第一个屏幕截图时,它会扩展。当像第二个截图一样,它会停留。当像第三个截图一样,它缩小了。

我尝试删除xib并创建一个新的,但行为保持不变。它让我疯狂。有什么建议? :(

1 个答案:

答案 0 :(得分:0)

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

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