1

ラベルを動的に作成し、最後に作成されたラベルを基準にしてラベルを再配置するコードを書いています。次のコードを使用して、コンテンツに合わせてラベルの高さを作成およびサイズ変更しています。

// Create label
UILabel *label =  [[UILabel alloc] initWithFrame:CGRectZero];
label.text = SomeVariatingTextContent;
[self.scrollView addSubview:label];
// Resize Label
UIFont* font = label.font;
CGSize constraintSize = CGSizeMake(label.frame.size.width, MAXFLOAT);
CGSize labelSize = [label.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeTailTruncation];
label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, 280, labelSize.height);

以前に作成されたラベルの 8 ポイント下になるように作成される次のラベルを再調整できるように、以前のラベルの識別子を見つけるにはどうすればよいですか?

4

1 に答える 1

2

CGRectGetMinY などを使用してみてください (ここを参照してください:以前の UILabel のエッジを取得するには、CGGeometry リファレンスを参照してください。たとえば、次のようになります。

CGFloat *yPos =  CGRectGetMinY(previousLabelRect);
nextLabel.frame = CGRectMake(x,yPos+8,width,height);

編集

最後の UILabel は、ビューに最後に追加したものであると想定できるため、次のことができます。

 UILabel lastLabel = [[self.view subviews]lastObject];

後で他のサブビューを追加した場合は、配列をフィルタリングして UILabels のみを取得する必要があることに注意してください。順序に問題がある場合は、すべてのラベルを取得し、それらの y 位置をチェックして最後のラベルを取得できます。

もう 1 つの方法は、ラベルを作成するループの最後に UILabel へのポインターを保存し、新しいラベルが作成されるたびにそのポインターを更新することです。

于 2012-12-29T14:08:00.447 に答える