4

まず、新しいラベルを作成します。

UILabel *newLabel=[[UILabel alloc] init];
newLabel.font=[UIFont preferredFontForTextStyle:@"Body"];
newLabel.translatesAutoresizingMaskIntoConstraints=NO;
newLabel.numberOfLines=0;
newLabel.lineBreakMode=NSLineBreakByWordWrapping;
newLabel.text=[NSString stringWithFormat:@"This line is this: %@%@%@",resultString,resultString,resultString];

次に、さまざまな制約を作成します。

NSArray *labelConstraints=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[label]"
                                                                      options:0
                                                                      metrics:nil
                                                                      views:@{@"label": newLabel}];
//Merge the above constraint into a tracking array
labelConstraints=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[label]|"
                                                             options:0
                                                             metrics:nil
                                                               views:@{@"label": newLabel}];
//Again, move the constraint into a tracking array

//Later, we apply all constraints in the tracking array to self.

残念ながら、ラベルは期待どおりに動作していません。上記の制約を適切に読み取ったと仮定すると、ラベルは含まれているビューの一方の端から他方の端まで水平方向に移動し、垂直方向の特定の高さにバインドされないようにする必要があります。これを numberOfLines=0 と lineBreakMode=NSLineBreakByWordWrapping の設定と組み合わせると、セルが水平方向に伸びて必要なすべての行が表示されます。代わりに、すべてを 1 行に収めるために、含まれているビューの端を越えて線が伸びています。その理由はわかりません。

それが重要な場合、[self] は UITableViewCell のサブクラスであり、コンテンツのサイズに合わせて動的にスケーリングするようにプログラムしようとしています。セルの内容を正しくレイアウトすることができれば、セルの実際のサイズを計算するのは比較的簡単です。

4

2 に答える 2