3

Autolayout と Interface Builder を使用してカスタム TableViewCell を作成しようとしています。次のように viewDidLoad でセルをセットアップします。

[tableView registerNib:[UINib nibWithNibName:@"BChatCell" bundle:Nil] forCellReuseIdentifier:@"ChatCell"];

次に、次のようにセルをデキューします。

- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:        (NSIndexPath *)indexPath {
    BChatCell * cell = [tableView_ dequeueReusableCellWithIdentifier:@"ChatCell"];
    return cell;
}

テーブル ビューが最初に読み込まれると、正しく読み込まれます。

ここに画像の説明を入力

ただし、テーブルがスクロールした後、自動レイアウトが壊れます。

ここに画像の説明を入力

制約は次のとおりです。

ここに画像の説明を入力

どんな助けでも大歓迎です。

4

2 に答える 2

3

まったく同じ問題がありました。細胞が再利用されるまで、すべてが素晴らしく見えるので、私を夢中にさせました.

サイズが変更されたビューは、セル自体 (常に画面幅) ではなく、私が持っていた内部コンテンツ ビューであることがわかりました。NSLog(@"%@", [theView constraints]);デバッグに役立つビューのすべての制約を出力できます

また、役に立たなかった:

  • すべての重要なビューとサブビューをtranslatesAutoresizingMaskIntoConstraints=NO

  • 内部の境界を手動で設定する-(void)prepareForReuse

  • 呼び出しsetNeedsUpdateConstraints

"contentView"問題は、既に で名前付きビューになっている内側のカード ビューに名前を付けたことですUITableViewCell。それを変更すると、サイズ変更の問題が修正されました。

于 2014-03-11T21:53:57.447 に答える
0

あなたのアプローチの問題は、静的な先頭と末尾です。末尾の定数は 200 であり、回転させると、(画面の幅のため) 200 よりも大きくなります。これは制約を破り、おそらくコンソールで、制約にあいまいさがあり、自動的に新しい制約が追加されたと言っています(奇妙な動作になります)。

  • したがって、私が提案するのは、末尾の制約を200 以上にして、それが機能するかどうかを確認することです。
  • 別の解決策は、その青いビューに幅の制約を追加し、末尾の制約を削除することです。

これが役立つことを願っています!

于 2014-02-26T15:38:23.363 に答える