2016-07-04 11 views
1

私はUITextViewを含むテーブルビューにセルを持っています。 UITextviewには、uitableviewcellコンテンツビューの先頭、先頭、末尾、下端の制約があります。テキストビューに空のテキストが含まれている場合は、uitableviewcellを非表示にしたい。そのために、私はセルの高さを0に減らします。テキストビューにはUITableViewCellに関して制約が設定されているためです。UITextview(Autolayout)を含むUITableviewcellを非表示にします。

UITableViewCell 
--------------------------- 
|   -T-   | 
| -L- UITextView -R- | 
|_________-B-_____________| 

L、T、B、R - 左、上、下、右制約

私は、制約の問題を取得しています。

Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
     (1) look at each constraint and try to figure out which you don't expect; 
     (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x7fe5d58753a0 UITableViewCellContentView:0x7fe5d5874fe0.bottomMargin == UITextView:0x7fe5d399c000.bottom>", 
    "<NSLayoutConstraint:0x7fe5d58753f0 UITableViewCellContentView:0x7fe5d5874fe0.topMargin == UITextView:0x7fe5d399c000.top>", 
    "<NSLayoutConstraint:0x7fe5d5888a20 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7fe5d5874fe0(0.5)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fe5d58753a0 UITableViewCellContentView:0x7fe5d5874fe0.bottomMargin == UITextView:0x7fe5d399c000.bottom> 

どのようにしてセルを非表示にすることができますか?

+0

あなたは0 –

+0

にトップとボトム制約の定数を変更することができます。しかし、細胞は、繰り返しコンテンツです。どのように制約を変更できますか?詳細を教えてください –

+0

autolayoutまたはheightForRowによって、高さを0に設定するにはどうすればいいですか:atIndexPath? – 7vikram7

答えて

1

は私が制約をオフにしてactiveプロパティを使用してのだろう。これは最も簡単な方法ですが、NSLayoutConstraintactiveプロパティは最初のiOS 8に

を追加しましたので、あなたが必要なすべての制約を含むIBOutletCollection配列を持っていることを確認し、それが唯一のiOS 8+上で動作することに注意してください。

@IBOutlet var allConstraints : [NSLayoutConstraint]! 

xib /ストーリーボードがある場合は、それらを接続することができます。さもなければコードでそれらを設定してください。

その後、あなたは、セルを非表示にしたいです場合:テーブルビューのデータソース方式-cellForRowAtIndexPath:

cell.allConstraints.forEach { $0.active = false } 

。次のように

また、セルのサブクラスに-prepareForReuse:メソッドをオーバーライドします:隠されたセルは非隠されたセルを作成するために再利用された場合、物事が正しく動作して

override func prepareForReuse() { 
    super.prepareForReuse() 
    allConstraints.forEach { $0.active = true } 
} 

これは、背中の制約をオンにします。

またsetNeedsLayoutlayoutIfNeededに呼び出しを追加する必要があるかもしれませんが、私はして起動するそれらなしで試してみた - うまくいけば、レイアウトはでトリガーローパステーブルビューのreloadDataあなたのためのものの世話をする必要があります - それは、常に最高ではないにそれらの関数を呼び出す必要がない場合はそれらを呼び出します。

0

文字列の値をグローバル変数に保存し、次にcellForRowAtIndexPathにvarがnullかどうかを確認できます。そうでない場合は、セルを返すことができます。このよう

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    if (your global var != nil) { 
     let cell: MyCell? = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as? MyCell 

     cell?.label.text = your value 

     return cell! 
    } 

} 
+0

あなたの提案をありがとう。しかし、私は自動レイアウトでやっている方が好きです。あなたは自動レイアウトで私を助けてくれますか? –

0

制約の関係を変更してみます。代わりに等しい使用以下のまたは等しい

Contraints Settings

関連する問題