UITableViewCell在使用xcode6 beta6接口生成器的iOS7和iOS8模拟器中表现不同

UITableViewCell在使用xcode6 beta6接口生成器的iOS7和iOS8模拟器中表现不同,ios,uitableview,xcode6-beta6,Ios,Uitableview,Xcode6 Beta6,请在同一个应用程序中查看以下3个表格视图单元格,在interface builder中单元格的高度为54,边框是使用代码中的CAShapeLayer创建的,高度为44。由于我在项目开发期间从xcode5切换到了xcode6,所以uitableviewcell的一部分在xcode5中创建,另一部分在xcode6中创建,还有一些单元格在xcode5中创建,后来在xcode6中更改 图1。使用所需样式xcode5创建 图2。使用xcode6 beta6创建,显示在iOS8模拟器中,泄漏指示器错位,文

请在同一个应用程序中查看以下3个表格视图单元格,在interface builder中单元格的高度为54,边框是使用代码中的CAShapeLayer创建的,高度为44。由于我在项目开发期间从xcode5切换到了xcode6,所以uitableviewcell的一部分在xcode5中创建,另一部分在xcode6中创建,还有一些单元格在xcode5中创建,后来在xcode6中更改

图1。使用所需样式xcode5创建

图2。使用xcode6 beta6创建,显示在iOS8模拟器中,
泄漏指示器
错位,文本偏移

图3。image2的同一个单元格使用xcode6 beta6,但在iOS7.1设备中运行,
泄漏指示器
放错了位置

我比较了interface builder中uitableviewcell的所有设置,没有发现任何差异

我比较了xxx.storyboard的源文件,最后得出了不同的观点:

案例1:xcode5版本的“tableViewCell”标记是:

<tableViewCell contentMode="scaleToFill" selectionStyle="none" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="xxCell" rowHeight="54" id="far-Kn-fRP" customClass="xxCell">
  <rect key="frame" x="0.0" y="119" width="320" height="54"/>

案例2:下面是“tableViewCell”标记,即xcode6 beta6版本,请注意,创建新uitableviewcell时,缺失

<tableViewCell contentMode="scaleToFill" selectionStyle="none" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="xxxCell" rowHeight="54" id="eav-sl-Yrd" customClass="xxxCell">

案例3:image2和image3中的场景是在xcode5中创建的uitableviewcell,默认高度为44,并在xcode6 beta6中修改,将高度更改为54,源为:

<tableViewCell contentMode="scaleToFill" selectionStyle="none" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="xxxCell" rowHeight="54" id="eav-sl-Yrd" customClass="xxxCell">
  <rect key="frame" x="0.0" y="119" width="320" height="44"/>

总之,xcode6 beta6似乎没有处理.storyboard文件中的标记,这将导致uitableviewcell的错位

添加:在上述所有场景中,代码实现了
heightforrowatinexpath
,并返回54

我的问题是

  • 我没有找到如何将
    披露指标
    放在与xcode5相同的位置

  • xcode6中缺少的是一个bug还是被其他标记所取代?可能与iOS8中的单元格自动调整大小功能有关


  • 是否有其他解决方案使uitableviewcell正确?目前,我正在手动修改.storyboard文件,以便使用xcode6 beta6为每个新创建的uitableviewcell添加标记,而且很容易出错


  • 谢谢。

    关于错放边界层-您需要覆盖自定义单元格类的
    布局子视图
    函数,并相应地更新层的框架

    也不要使用单元格的bounds属性,因为它与帧大小不同:

    - (void)layoutSubviews
    {
        [super layoutSubviews];
        self.borderLayer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    }
    

    关于披露指标的偏移量-我无法从您的屏幕截图中重现问题…

    单元格内容是如何构造的?所有内容都在
    contentView
    中吗?是否有限制?这些约束是连接到单元格还是连接到
    contentView
    (这非常重要)?另外,您是否知道新的iOS 8自动行高功能?这可能会影响单元格的垂直布局。“我目前正在手动修改.storyboard文件,而且很容易出错。”我觉得您构建单元格的方式有误。@matt感谢您的快速评论。这两个标签作为“contentView”的子视图放置,并相对于“superView”(本例中的contentView)设置前导和中心位置的约束,具有固定的宽度和高度。我的最后一句话“我目前正在手动修改.storyboard文件”意味着我必须为使用xcode6 beta6 interface builder创建的uitableviewcell手动添加。“新iOS 8自动行高功能”对我来说是新功能,我会检查一下。谢谢。@matt谢谢您提供“新iOS 8自动行高功能”的信息,我刚刚检查过,非常棒。但是我的项目需要支持iOS7,所以我已经为所有uitableview实现了
    heightforrowatinexpath
    。我的问题中的示例在函数中返回54:
    heightforrowtaindexpath
    谢谢您的评论,但这里的问题是文本和披露指标的错位,而不是现金支付者。顺便说一句,在我使用xcode6.1之后,我从来没有看到过这个问题