2017-06-22 5 views
0

私は静的なテーブルビューコントローラを使用しており、Interface BuilderでUIを定義しています。Interface Builderでこのレイアウトを達成する方法は?

すべてのUILabelsを同じ幅にして、UITextFieldsの左側が一番上になるようにします。

私が幅を強制すると、しばしば互いにオーバードローされます。

enter image description here

私は、コントローラ内の「安全なメッセージ」の幅に基づいて、プログラムでUILabel幅を変更することを考えていましたが、私は再レイアウトにそれを得ることができませんでした。

let width = labelSafeMessage.frame.size.width; 
labelName.frame.size.width = labelSafeMessage.frame.size.width; 
labelName.sizeToFit(); 
labelMessage.frame.size.width = labelSafeMessage.frame.size.width; 
labelMessage.sizeToFit(); 

答えて

1

これはインターフェイスビルドのみを使用して行うことができ、ラベルを同じサイズにする必要はありません。唯一必要なことは、UITextFieldsの先頭のスペーシングをスーパービューに設定し、 。

+0

それはトリックでした。ありがとう! –

0

tableViewがデータを表示する前に幅を計算して再レイアウトを避けることができます。

はちょうどそれを保持する行の高さマイナス上部と下部制約だろうラベルの高さとDEFINED_HEIGHTを置き換えるセットで最大の文字列を取得し、この

var str = "Hello, playground" 
let constraintRect = CGSize(width: CGFloat.greatestFiniteMagnitude, height: DEFINED_HEIGHT) 
let boundingBox = (str as? NSString)?.boundingRect(with: constraintRect, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSFontAttributeName: FONT], context: nil) 
boundingBox.width //width for the labels 

を使用します。 とFONT(ラベルに使用されているフォント用)。

0

UITableViewを使用する代わりに、を使用すると、UIViewsが含まれます。

Align Leading edgesAlign Trailing edgesにごUILabels制約を設定し、正しくラベルが切り取られていないだけでなく、Content Hugging PriorityContent Compression Resistance Priorityを設定し合います。

UITextFieldsの制約をAlign Leading edgesAlign Trailing edgesに設定してください。これはそのトリックです。

関連する問題