何が起こっているのか、これをどのように処理するのかわかりません。セルにUIViewがあり、IBを使用して制約を設定しましたが、何らかの理由でセルの最後まで伸びています。どうすれば伸びるのを止められるでしょうか。
結果は次のとおりです。
ステッパー コントロールを動的に挿入していますが、ご覧のとおり、UIView はセルの最後まで伸びています。ピン幅を試してみたところ、すべてが完全に台無しになり、UIView も表示されません。
制約のスクリーンショットは次のとおりです。
何が起こっているのか、これをどのように処理するのかわかりません。セルにUIViewがあり、IBを使用して制約を設定しましたが、何らかの理由でセルの最後まで伸びています。どうすれば伸びるのを止められるでしょうか。
結果は次のとおりです。
ステッパー コントロールを動的に挿入していますが、ご覧のとおり、UIView はセルの最後まで伸びています。ピン幅を試してみたところ、すべてが完全に台無しになり、UIView も表示されません。
制約のスクリーンショットは次のとおりです。
さて、ここでいくつかの違いを描きましょう。
これに対する簡単な方法は、常にセルにステッパーがあることです (UIView はありません)。ステッパーが表示されないセルについては、hidden
YES に設定します。表示されるはずのセルについては、hidden
NO に設定します。それが私がすることです。
これを行うプログラマーの方法は、セルに青い UIView がまったくないことです。ステッパーをコードに追加し、その制約をコードに指定して配置します。あなたが言った:
そのため、座標をハードコードする必要はありません
ただし、コードに制約を追加することは、座標を「ハードコーディング」することではありません。制約を使用すると、スーパービューからのインセットに関して概念的に位置を記述し、スーパービューのサイズが変更されても、正しい位置に配置されます。したがって、ステッパーとその制約を追加することに哲学的な異議はありません。それをしないのは単に怠惰です。
怠惰だが無駄な方法は、あなたがしていることをすることです。つまり、ペン先に青い UIView をガイドとして追加します。ただし、青い UIView をガイドとして使用したとしても、制約が正しければ、これを正しく行うことができるはずです。これを試したところ、問題を再現できませんでした。青いビューが、Interface Builder に表示されるセルと同じ場所に表示されました。
即時の解決策は、UITableViewCell が描画される nib で Autolayout を使用しないことです。つまり、この nib のファイル インスペクターで [Use autolayout] のチェックを外します。したがって、昔ながらのスプリングとストラット (自動サイズ変更) を使用してサブビューを配置します。