修复因缺少Rect标记而导致UITableViewCell错误的下边距

时间:2014-10-03 05:02:42

标签: ios uitableview

我想向你们澄清我的问题。

最近我只是将我的Xcode升级到最新的Xcode 6.0.1(Maverick OS)并继续我的Xcode 5创建的项目没有问题。

直到我创建新的UITableViewCell并且放置少量具有固定底部边距的视图..当在控制器中显示时它被弄乱了。具有固定底部边距的视图Y位置搞砸了, 但是......在Xcode 5上创建的现有UITableViewCell没有发生。它也有固定底部边距的View,但是错误确实发生了,当我调整UITableViewCell的大小时它调整位置就好了

继续我的调试,我尝试重新创建现有的UITableViewCell并得到相同的错误。经过多次测试后,我决定通过在文本编辑器中打开XIB来比较视图,发现导致错误的一点差异。

您可以比较2 UITableViewCell之间的结果。左图是使用在Xcode 5上创建的现有UITableViewCell,在Xcode 6上创建的右侧。" text 2"标签Y位置搞砸了,超出了单元格高度。

如果您检查Xcode IB,则所有设置都相同。但文本编辑器揭示了更多

created with Xcode 5 created with Xcode 6

现有的UITableViewCell(Xcode 5)

<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="WSPostCell" rowHeight="100" id="PdK-a2-c84" customClass="WSPostCell">
    <rect key="frame" x="0.0" y="0.0" width="320" height="100"/>
    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
    <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="PdK-a2-c84" id="Y9d-Wv-BGf">
        <rect key="frame" x="0.0" y="0.0" width="320" height="99"/>
        <autoresizingMask key="autoresizingMask"/>
        <subviews>
            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text 1" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Vuu-pP-JOA">
                <rect key="frame" x="20" y="8" width="280" height="30"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <fontDescription key="fontDescription" type="system" pointSize="12"/>
                <nil key="highlightedColor"/>
            </label>
            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text 2" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="40X-YI-rMb">
                <rect key="frame" x="20" y="61" width="280" height="30"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                <fontDescription key="fontDescription" type="system" pointSize="12"/>
                <nil key="highlightedColor"/>
            </label>
        </subviews>
    </tableViewCellContentView>
    <point key="canvasLocation" x="127" y="120"/>
</tableViewCell>

新的UITableViewCell(Xcode6)

<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="100" id="aI1-wx-nYK">
    <rect key="frame" x="0.0" y="0.0" width="320" height="100"/>
    <autoresizingMask key="autoresizingMask"/>
    <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="aI1-wx-nYK" id="dNV-Xk-dVs">
        <autoresizingMask key="autoresizingMask"/>
        <subviews>
            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text 1" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="N8L-oO-ECr">
                <rect key="frame" x="8" y="8" width="280" height="30"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <fontDescription key="fontDescription" type="system" pointSize="12"/>
                <nil key="highlightedColor"/>
            </label>
            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text 2" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="IZV-oh-bet">
                <rect key="frame" x="8" y="61" width="280" height="30"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                <fontDescription key="fontDescription" type="system" pointSize="12"/>
                <nil key="highlightedColor"/>
            </label>
        </subviews>
    </tableViewCellContentView>
    <point key="canvasLocation" x="511" y="120"/>
</tableViewCell>

如果仔细查看,<rect>标记后面的第二个XML缺少<tableViewCellContentView>标记。

 <rect key="frame" x="0.0" y="0.0" width="320" height="99"/>

这是一个错误吗?或者我错过了导致这个可怕错误的东西?我在文件检查器上禁用了自动布局和大小类。

1 个答案:

答案 0 :(得分:0)

我在Xcode6中遇到了类似的问题。而且,我使用动态细胞,其内容不可见。 我尝试使用和不使用自动布局和类大小。

在故事板中我有下一个:VC&gt;视图&gt; TableView&gt;自定义单元格(带标识符)&gt; ContentView

我创建了一个非常简单的项目 - 它使用TableView加载VC,如下所示:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"DataCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.backgroundColor = [UIColor redColor];
return cell; }

但是我甚至无法改变单元格的背景......它是一团糟......我尝试了其他方式使用标签和标签,创建子类但没有希望。我的所有网点都已连接,所有标识符都设置好了,我猜这个单元格出现在tableview之外,它是由AutoLayout引起的......

目前我有一个解决问题的黑客建议 - 你可以从之前的一个项目导入一个带有适当TableView的故事板。之后,所有自定义工作。 How to import storyboard.

然而,这不是一个好习惯,我希望有人会找到编码解决方案,否则Apple会解决这个问题。