私が取り組んでいるプロジェクトには、UITableViewCellの幅のちょうど半分を占めるデータを含む2つのボタンが必要です。
以前、これを実行したかったときは、通常、ボタンがそのスーパービューと同じ幅になり、乗数が0.5になるという制約を設定しました。
ただし、何らかの理由でUITableViewCell内で、ストーリーボードにこのオプションを提供させることができません。GUIの「EqualWidths」制約はグレー表示されています。
プログラムで実行することを決心したので、カスタムセルで次のコードを結びました。cellInit()
以下のメソッドをawakeFromNibで呼び出そうとしましたが、エラーが発生しました。cellForRowAtIndexPath
セルがロードされたときにそれを呼び出すだけでも試しましたが、同じエラーが発生しました。
UIKitをインポートする
クラスPollCell:UITableViewCell {
@IBOutlet weak var option1: UIButton!
@IBOutlet weak var option2: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
//cellInit() //Commented out because causes error
}
func cellInit(){
option1.addConstraint(NSLayoutConstraint(item: option1, attribute: .Width, relatedBy: .Equal, toItem: self, attribute: .Width, multiplier: 0.5, constant: 0))
}
}
これは私が得ているエラーです:
'NSInternalInconsistencyException'、理由: '制約の準備ができていないビュー階層でレイアウトを設定できません。
私が達成しようとしていることはかなり標準的なことなので、これはクレイジーなことではないと思います。おそらく間違った方法で何かをしているのでしょう。いずれにせよ、私のような多くの新参者がこれに遭遇すると思います。前もって感謝します!
コメントでは、あなたが活用することを議論しました contentView.frame.maxX
または、AutoLayoutを使用することもできます。 setTranslatesAutoresizingMaskIntoConstraints(false)
タグを割り当てます(オプション)。ボタンは2つしかありませんが、2つ以上の場合はタグを使用するUIButton
ため、ボタンごとに手動で入力する必要はありません。
addConstraint(NSLayoutConstraint(item: self.viewWithTag(1) as UIButton, attribute: .Right, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 0.33, constant: 0))
addConstraint(NSLayoutConstraint(item: self.viewWithTag(2) as UIButton, attribute: .Right, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 0.66, constant: 0))
または辞書を使用したVFL:
for button in buttonsDictionary.keys {
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[\(button1)]-[\(button2)]|", options: .allZeros, metrics: nil, views: buttonsDictionary))
}
cell.updateConstraints()
TableViewでcellForRowAtIndexPathを呼び出します。
以下のリンクで詳細を確認できます。2つのボタンを並べた例があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加