2016-11-10 6 views
1

1つのセルに異なるコンテンツ(ビュー、ラベル、イメージビュー)を持つtableViewセルがあります。しかし、何かの細胞内容は満ちていないことがあります。どのようにして、常に制約を削除したり追加したりせずにサイズ変更セルを使用できますか?ありがとう。iOSの制約を削除せずに異なるコンテンツのtableViewセルをサイズ変更する方法

illustration of the problem

+0

ここにあなたを助けるかもしれない何か - http://stackoverflow.com/questions/18065938/how-to-use-auto-layout-to-move-other-views-when-a-view-is-hidden –

+0

私はこれをチェックします。ここでは制約がありますが、非常に多くの要素があり、これを行うには非常に多くのコードが必要です。 –

答えて

0

この問題の可能な解決策の一つ:

  1. 優先千
  2. に隠された状態の制約を追加します。優先度の低いである(例:750)
  3. 保存制約をリサイズした状態のための余分な制約を追加します。を隠し状態にするIBOutletコレクション
  4. 制約を保存するを別のものに変更IBOutletコレクション

コード:

@IBOutlet var hiddenConstraints: [NSLayoutConstraint] = [] 
@IBOutlet var visibleConstraints: [NSLayoutConstraint] = [] 

func hide(_ hide: Bool) { 

    for hiddenConstraint in self.hiddenConstraints { 
     hiddenConstraint.isActive = hide 
    } 

    for visibleConstraint in self.visibleConstraints { 
     visibleConstraint.isActive = !hide 
    } 

    self.layoutIfNeeded() 
} 

速く解決策があります:コンテナビュー

  • を変更するためのコンテナビュー
  • 設定高さの制約の中に隠すことができ

    1. 移動量が隠されている場合はコード高さの制約定数から0に、可視の場合は適切な高さに

    コード:それは制約につながるよう

    @IBOutlet var heightConstraint: NSLayoutConstraint! 
    
    func hide(_ hide: Bool) { 
    
        self. heightConstraint.constant = hide ? 0 : 150 //Estimated height 
    
        self.layoutIfNeeded() 
    } 
    

    これは、良い方法ではありませんが、実行時にクラッシュします。だから私は最初のものを使うのが好きです。

    また、他のセルを上下に移動するには、テーブルからセルを更新する必要があります。

  • +0

    ありがとう、よく働いた –

    0

    レイWenderlichはここで見つけることができますテーブルセルの動的なサイズ変更に素晴らしいチュートリアルがあります。 https://www.raywenderlich.com/129059/self-sizing-table-view-cells

    TLを、DRは、あなたがあなたのセルの内容がすべての4つの側面に固定されていることを確認する必要がありますセルのコンテンツビューに加えて、ラベルの高さの制約以上の高優先垂直ハギングとして設定することができます。

    +0

    問題はビューに2つの状態があります。そして、それが非表示でないときは、高さとすべての制約があり、セルを小さくすることはできません –

    +0

    隠すと言うとき、私はあなたが 'hidden'プロパティを設定していると仮定しますか?代わりに高さ制約のコンセントを追加し、非表示にするには0に設定してください。次に、セルのサイズが期待どおりに変更されます。 –

    +0

    再び制約を使用して作業します。あなたが言うように、私はこの項目で店舗を作る必要があり、0 –

    関連する問題