UITableViewCell计算正确的高度,但UILabel不会换行

时间:2015-03-03 00:32:42

标签: ios xcode uitableview swift uilabel

我无法让UILabel自动换行而不设置明确的首选宽度。请帮忙。

这是我在UITabel中的UILabel界面生成器

UILabel IB Attributes Inspector UILabel IB Size Inspector

我的结果是:

Application Example Result

但是,如果我在:

中指定显式的preferredWidth

explicit height

我得到以下内容:

With wordwrapping

虽然它有一些奇怪的垂直间距,但至少它正确包裹。

此外,这是我在UITableViewController中构建行的方法:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!, object: PFObject!) -> PFTableViewCell! {

    let cell = tableView.dequeueReusableCellWithIdentifier(Constants.CellReuseIdentifier, forIndexPath: indexPath) as? BurnFeedTableViewCell ??
        BurnFeedTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: Constants.CellReuseIdentifier)

    cell.nameOfBurnLabel?.text = object.objectForKey("name") as? String
    if let owner = object.objectForKey("owner") as? PFUser {
        cell.ownerLabel?.text = owner.username
    } else {
        cell.ownerLabel?.text = "unknown"
    }

    return cell
}

并定义rowHeight&估计如何:

override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.estimatedRowHeight = 100.0
    self.tableView.rowHeight = UITableViewAutomaticDimension
}

我真的希望无需指定显式高度即可实现此功能。另外,我玩过contentCompressionResistancePriority并没有运气。

这绝对类似于以下SO问题:Using iOS 8 flexible table cells, cell height changes but text doesn't wrap

然而,那里的解决方案似乎没有起作用。事实上,有一些类似的问题。我似乎无法让他们工作。

编辑:来自main.storyboard的tableViewCell的XML

<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="Burn Feed Cell"
               rowHeight="95" id="bif-hV-Vqt" customClass="BurnFeedTableViewCell" customModule="Burn"
               customModuleProvider="target">
    <rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
    <autoresizingMask key="autoresizingMask"/>
    <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES"
                              contentMode="center" tableViewCell="bif-hV-Vqt" id="KGP-Sx-cZC">
        <autoresizingMask key="autoresizingMask"/>
        <subviews>
            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251"
                   verticalHuggingPriority="251" text="owner" lineBreakMode="tailTruncation"
                   baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO"
                   translatesAutoresizingMaskIntoConstraints="NO" id="TZ9-cx-K29">
                <rect key="frame" x="8" y="37" width="48" height="21"/>
                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                <nil key="highlightedColor"/>
            </label>
            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251"
                   verticalHuggingPriority="251" text="Burn Name" lineBreakMode="wordWrap" numberOfLines="0"
                   baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="90"
                   translatesAutoresizingMaskIntoConstraints="NO" id="v96-dx-9z5">
                <rect key="frame" x="8" y="8" width="584" height="21"/>
                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                <nil key="highlightedColor"/>
            </label>
            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251"
                   verticalHuggingPriority="251" text="countdown" lineBreakMode="tailTruncation"
                   baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO"
                   translatesAutoresizingMaskIntoConstraints="NO" id="6YZ-ne-79f">
                <rect key="frame" x="506" y="37" width="86" height="21"/>
                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                <nil key="highlightedColor"/>
            </label>
        </subviews>
        <constraints>
            <constraint firstItem="v96-dx-9z5" firstAttribute="leading" secondItem="KGP-Sx-cZC"
                        secondAttribute="leadingMargin" id="Iwe-kT-1Do"/>
            <constraint firstItem="6YZ-ne-79f" firstAttribute="trailing" secondItem="KGP-Sx-cZC"
                        secondAttribute="trailingMargin" id="JOA-d6-q3X"/>
            <constraint firstItem="6YZ-ne-79f" firstAttribute="baseline" secondItem="TZ9-cx-K29"
                        secondAttribute="baseline" id="JXU-Hf-vVb"/>
            <constraint firstItem="TZ9-cx-K29" firstAttribute="leading" secondItem="KGP-Sx-cZC"
                        secondAttribute="leadingMargin" id="VOG-Xh-9wd"/>
            <constraint firstAttribute="bottomMargin" relation="greaterThanOrEqual" secondItem="TZ9-cx-K29"
                        secondAttribute="bottom" constant="5" id="am1-l0-8EV"/>
            <constraint firstItem="TZ9-cx-K29" firstAttribute="top" secondItem="v96-dx-9z5" secondAttribute="bottom"
                        constant="8" symbolic="YES" id="jLQ-yQ-A8V"/>
            <constraint firstItem="v96-dx-9z5" firstAttribute="trailing" secondItem="KGP-Sx-cZC"
                        secondAttribute="trailingMargin" id="sl2-Fb-sWy"/>
            <constraint firstItem="v96-dx-9z5" firstAttribute="top" secondItem="KGP-Sx-cZC" secondAttribute="topMargin"
                        id="xt3-Em-EaP"/>
        </constraints>
    </tableViewCellContentView>
    <connections>
        <outlet property="countdownLabel" destination="6YZ-ne-79f" id="te1-QF-Nuo"/>
        <outlet property="nameOfBurnLabel" destination="v96-dx-9z5" id="Wki-e1-0Np"/>
        <outlet property="ownerLabel" destination="TZ9-cx-K29" id="wqh-Cj-yQX"/>
    </connections>
</tableViewCell>

2 个答案:

答案 0 :(得分:0)

您的问题是自动布局。为了获得正确的宽度/高度包装,您需要确保UITableViewCell中的所有元素都正确地从单元格的左边距到右边缘以及从上边距到底部。

答案 1 :(得分:0)

您是否禁用了所有标签的自动调整掩码转换?

cell.nameOfBurnLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
cell.ownerLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
cell.countdownLabel.setTranslatesAutoresizingMaskIntoConstraints(false)

至少我需要做的是使动态单元格高度与标签一起使用。