7

AutoLayoutをUITableViewCell使用したカスタム ラベルがあります。その制約は、コンテンツ ビューに対して一定の先頭、末尾、下部、および上部のスペースで設定されます。これらのセルが表示されるテーブル ビュー コントローラーはUISplitViewController. テーブル ビューが読み込まれると、次のコードを使用してセルの高さを計算します。

CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
CGFloat height = size.height;

縦向きでは、これによりセルを適切に表示できます。セルの一部のスクリーンショットを次に示します。

ここに画像の説明を入力

ただし、iPad を横向きに回転すると、正しいサイズが計算されず、パディングが多すぎます。

ここに画像の説明を入力

が呼び出されたときにブレークポイントを設定するtableview:heightForRowAtIndexPath:と、コンテンツ ビューのサイズが正しくレポートされません。実際には、テーブル ビューの古い、より狭いサイズが報告されています。

UISplitViewControlleriPadでセルのサイズを適切に変更するにはどうすればよいですか?

4

1 に答える 1

3

UILabel#preferredMaxLayoutWidth は systemLayoutSizeFittingSize に影響します。例えば。Interface Builder を使用して、ビューに UILabel を配置できます。

ラベルのレイアウト

  • スーパービューの幅は 320px です。
  • UILabel の水平スペースの制約は 20px です。

この場合、UILabel#preferredMaxLayoutWidth は 280px に設定されます。Superview の frame.width が 480px だった場合でも、systemLayoutSizeFittingSize は 320px を超えない幅を返します。

解決策の 1 つは、CustomCell#setFrame メソッドをオーバーライドすることです。

- (void)setFrame:(CGRect)frame {  
     [super setFrame:frame];  
     _label.preferredMaxLayoutWidth = frame.size.width - 20*2 /*Horizontal Spacing*/;   
}

そして、label.text を更新するときにレイアウトを更新する必要があります。

_customCell.label.text = @"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
[_customCell setNeedsLayout];
[_customCell layoutIfNeeded];
于 2013-12-21T13:06:39.473 に答える