7

同じアプリで以下の 3 つのテーブル ビュー セルを参照してください。セルの高さはインターフェイス ビルダーで 54 です。境界線は高さ 44 のコードで CAShapeLayer を使用して作成されます。プロジェクトの開発中に xcode5 から xcode6 に切り替えたので、 uitableviewcell の一部は xcode5 で作成され、一部は xcode6 で作成され、xcode5 で作成され、後で xcode6 で変更されたセルがあります。

画像1. 目的のスタイルである xcode5を使用して作成xcode5 インターフェイスビルダーに組み込まれた uitableviewcell

画像2. xcode6 beta6で作成、iOS8 シミュレーターで表示、disclosure indicator配置ミス、文字ずれあり xcode6 beta6 でビルドされた uitableviewcell を iOS8 シミュレーターで表示

画像3. xcode6 beta6を使用して image2 の同じセルを使用していますが、 disclosure indicatoriOS7.1 デバイスで実行されています。xcode6 beta6 でビルドされた uitableviewcell、iOS7.1 デバイスで表示

Interface Builder で uitableviewcell のすべての設定を比較しましたが、違いは見つかりませんでした。

そして、xxx​​.storyboard のソースファイルを比較したところ、最終的に異なる点がわかりました。

case1 : 「tableViewCell」タグ、xcode5バージョンは次のとおりです。

<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"/>

case2 : 'tableViewCell' タグ、xcode6 beta6バージョンは以下、注意、新しい uitableviewcell を作成するときに < rect key="frame" ...> がありません

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

case3 : image2 と image3 のシナリオは、xcode5でデフォルトの高さ 44 で作成され、高さを 54 に変更するためにxcode6 beta6で変更された uitableviewcellであり、ソースは次のとおりです。

<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 ファイル内の < rect key="frame" ...> タグを処理しておらず、uitableviewcell の置き忘れが発生するようです。

追加: 上記のすべてのシナリオで、コードは を実装しheightForRowAtIndexPath、54 を返しました。

私の質問は

  1. disclosure indicatorxcode5と同じ場所に配置する方法がわかりませんでした

  2. < rect key="frame" ...> の欠落はバグですか、それとも xcode6 の他のタグに置き換えられていますか? iOS8 のセルの自動サイズ変更機能に関連する可能性はありますか?

  3. uitableviewcell を正しくする他の解決策はありますか? 現在、.storyboard ファイルを手動で変更して、xcode6 beta6 を使用して新しく作成された uitableviewcell ごとに < rect key="frame" ...> タグを追加していますが、エラーが発生しやすくなっています。

ありがとう。

4

1 に答える 1

0

ボーダー CAShapeLayer の置き忘れについて -layoutSubviewsカスタム セル クラスの関数をオーバーライドし、それに応じてレイヤーのフレームを更新する必要があります。

フレームサイズとは異なるため、セルの境界プロパティも使用しないでください。

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

開示インジケーターのオフセットについて - スクリーンショットから問題を再現できません...

于 2014-12-15T14:34:51.043 に答える