2017-08-20 12 views
0

コメントを表示するセルフサイジングtableViewCellがあります。現在のユーザーがコメントした場合は、編集ボタンと削除ボタンを表示します。私の制約はこの場合完全に機能します。すべての制約はInterface Builderで設定されます。セルフサイジングの制約を設定する方法インターフェイスビルダーで自動レイアウトを使用するUITableViewCell

コメントはユーザーに属していないときは、編集ボタンと削除ボタンの両方で.isHidden = trueを設定しています。この新しいシナリオの制約をどのように調整できますか?

enter image description here

編集:私はボタンをtrueに.isHiddenを設定すると問題がある、私はボタンスペースが空になるよう縮小し、高さをセルにします。

+0

ボタンは値に基づいて表示または非表示になっていますか?それとも、何か他のことが起こった後で、彼らが見せられ、隠される可能性がありますか?つまり、あなたが 'cellForRowAt'の中にいるときは、ボタンを表示するかどうかを決めるときに*ですか? – DonMag

+0

はいcellForRowAtでDonMag ..私はチェック:if comment.userID == appUserID。 コメントがユーザーに属している場合は、他のボタンを表示します。 –

答えて

1

別のアプローチ:セルの底部にボタンの底部から制約の​​状態トグル

.isHidden状態と一緒。

dateラベルの下部から、セルの下部に垂直方向のスペース制約を追加します。>= 4に設定します(または、ボタンがない場合には「パディング」が必要です)。

スペーシング拘束のために@IBOutletを編集ボタンの下部からセルの下部に追加します。画像には、bottom = Edit Button.bottom + 2と表示されます。あなたが持っていない限り、

@IBOutlet weak var editButtonBottomConstraint: NSLayoutConstraint! 
あなたはその行を編集する必要があります

が、しかし...制約が時に無効化さ割り当て解除されます:あなたは+ CTRLソースファイルにIBから制約をドラッグすると、それはこのようなIBOutletラインを生成します。それに対する「強い」言及。だから、単にweak修正削除:cellForRowAtで、今

@IBOutlet var editButtonBottomConstraint: NSLayoutConstraint! 

を、あなたが行うことができます:

cell.deleteButton.isHidden = !(comment.userID == appUserID) 
    cell.editButton.isHidden = !(comment.userID == appUserID) 
    cell.editButtonBottomConstraint.isActive = (comment.userID == appUserID) 

を、個人的に、私はセル内部の機能ということになるだろうが。あなたのセル設計に基づいて


は、しかし、私はcommentsLabel推測しているが、おそらく/多分複数行のラベルですか?そしてコメントが例えば8行であれば、セルを垂直方向に拡大したいでしょうか?そうであれば、まだいくつかの制約関係があります。

1

あなたはこのようにそれを行うことができます。nil

1.設定UIButtontitle

代わりのbuttonsを隠し、することができます。

2.UIButtonheight constraintIBOutletを取り、あなたがボタンを非表示にするたび0に設定します。

例:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return 2 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableCell 
    if indexPath.row == 1 
    { 
     cell.button.setTitle(nil, for: .normal) 
     cell.buttonHeightConstraint.constant = 0 
    } 
    return cell 
} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
{ 
    return UITableViewAutomaticDimension 
} 

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
{ 
    return UITableViewAutomaticDimension 
} 

カスタムUITableViewCell

class TableCell: UITableViewCell 
{ 
    @IBOutlet weak var button: UIButton! 
    @IBOutlet weak var buttonHeightConstraint: NSLayoutConstraint! 
} 

スクリーンショット:

enter image description here

これにより、要件に応じて制約が処理されます。

+0

簡単なメモ...自動サイズ調整セルを使用するときは 'func tableView(_ tableView:UITableView、heightForRowAt indexPath:IndexPath)を実装しないでください。' 'viewDidLoad'にテーブルビューの' .rowHeight = UITableViewAutomaticDimension'を設定するだけです。また、 '.estimatedRowHeight'の実際の値を設定すると、スクロールのパフォーマンスが向上し、' viewDidLoad'に設定するだけです。 – DonMag

+0

@DonMagありがとうございます。 :) – PGDev

+0

この解決策は動作する可能性がありますが、 "日付"ラベルとセルの下部の間にあまりにも多くの垂直方向のスペースが残ることがあります。 – DonMag

関連する問題