10

自動レイアウトを使用して、カスタムUITableViewCellのコンテンツをシフトおよびサイズ変更するにはどうすればよいですか?

contentView問題をより明確にするために、カスタムセルのを明るい灰色の背景色に割り当てました。これを可能な限り最小の問題に減らすために、私のカスタムセルには、いくつかの黄色い星を示すUIImageView名前が1つだけあります。ratingImageView下の画像では、このような3つのセルを見ることができます。

カスタムセルと自動レイアウトを備えたテーブルビュー

ratingImageViewには4つの制約しかありません。(1)幅= 81、(2)高さ= 40、(3)中心Yをスーパービューに揃え、(4)後続スペースをスーパービュー=20に合わせます。削除するスワイプで標準の削除ボタンが表示されたときに、画像ビューを左に強制するスーパービュー制約への後続スペースを期待していました。ただし、下の画像に示されているように、そうではありません。

自動レイアウトで移動しないカスタムセルコンテンツ

制約のさまざまな組み合わせを試しましたが、ratingImageView期待どおりにシフトできません。

この問題は、ストーリーボードの入門チュートリアルを実行することで発生しました。古き良き支柱とバネを使ってこの作品を作るのに問題はありませんでしたが、オートレイアウトで試してみることにしました。

4

2 に答える 2

12

チュートリアルONの Autolayout をオンにしたときに同じ問題が発生しました。

問題は制約によるものHorizontal Space (20)です。この制約の優先度は1000デフォルトで に設定されており、これは優先度が高いことを意味します。そのため、imageView は制約に従い、deleteボタンが表示されたときに UITableViewCell (この場合は PlayerCell) のコンテンツ ビューに対応して再配置することなく、その位置にとどまります。

同僚と協力して、この問題の解決策を見つけました。ratingImageView に制約を追加すると、プログラムでこの問題が解決されます。これよりも優れた解決策がある場合は、ここに投稿してください。

  1. ストーリー ボードを開き、PlayerCell を選択してその制約を展開します。
  2. 制約 " Horizontal Space (20)" を選択し、属性インスペクタでその優先度を任意の低い値に設定します。
  3. PlayersViewController.m ファイルで、cellForRowAtIndexPathtableView のデリゲート メソッドに次のコードを追加します。

    UIImageView *ratingImageView = cell.ratingImageView;
    NSDictionary *dict = NSDictionaryOfVariableBindings(ratingImageView); [cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[ratingImageView]|" options:0 metrics:nil views:dict]];

于 2012-12-03T19:23:12.930 に答える