ラベルのフレームを再計算するには、次の方法を使用します。
- (void)fitElements {
CGFloat currentX = 0.0;
CGFloat currentY = 0.0;
for (UIView *view in elements) {
CGRect rect = view.frame;
rect.origin.x = currentX;
rect.origin.y = currentY;
currentX = rect.origin.x + rect.size.width + 5;
view.frame = rect;
if (currentX >= 420) {
currentX = 0.0;
currentY += rect.size.height + 5;
}
}
}
ラベルが420を超える境界を越える場合は、オブジェクトを次の行に移動します。
- (void)createElements {
NSInteger tag = 0;
for (NSString *str in words) {
UILabel *label = [[UILabel alloc] init];
[self addGesture:label];
[label setTextColor:[UIColor blueColor]];
label.text = str;
[label setAlpha:0.8];
[label sizeToFit];
[elements addObject:label];
}
}
上記のように(を使用して[label sizeToFit];
)オブジェクトを作成すると、次のようになります。
私のレーベルがすべて国境を越えたことがわかるように
しかし、ハードコードフレームでラベルを使用すると、次のようになります。
これが私が欲しいものですが、この場合、私はオブジェクトの静的な幅を持っています。
これは、ハードコードフレームを使用した私の方法です。
- (void)createElements {
NSInteger tag = 0;
for (NSString *str in words) {
UILabel *label = [[UILabel alloc] init];
[self addGesture:label];
[label setTextColor:[UIColor blueColor]];
label.text = str;
[label setAlpha:0.8];
[label setFrame:CGRectMake(0, 0, 100, 20)];
[elements addObject:label];
tag++;
}
}
相対的な幅のオブジェクトを作成するにはどうすればよいですか?また、正しく再計算することもできますか?