テキストに応じてラベルの幅を調整するにはどうすればよいですか?テキストの長さが小さい場合はラベルの幅を小さくしたい...テキストの長さが小さい場合はそのテキストの長さに応じたラベルの幅が必要です。出来ますか?
実際、私は2つのUIラベルを持っています。この2つを近くに配置する必要があります。ただし、最初のラベルのテキストが小さすぎると、大きなギャップが生じます。このギャップをなくしたい。
テキストに応じてラベルの幅を調整するにはどうすればよいですか?テキストの長さが小さい場合はラベルの幅を小さくしたい...テキストの長さが小さい場合はそのテキストの長さに応じたラベルの幅が必要です。出来ますか?
実際、私は2つのUIラベルを持っています。この2つを近くに配置する必要があります。ただし、最初のラベルのテキストが小さすぎると、大きなギャップが生じます。このギャップをなくしたい。
//use this for custom font
CGFloat width = [label.text sizeWithFont:[UIFont fontWithName:@"ChaparralPro-Bold" size:40 ]].width;
//use this for system font
CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:40 ]].width;
label.frame = CGRectMake(point.x, point.y, width,height);
//point.x, point.y -> origin for label;
//height -> your label height;
この機能 sizeWithFont:
はiOS7.0で非推奨になっているため、sizeWithAttributes:
iOS7.0以降で使用する必要があります。また、古いバージョンをサポートするために、以下のコードを使用できます。
CGFloat width;
if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0)
{
width = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:16.0 ]].width;
}
else
{
width = ceil([text sizeWithAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:16.0]}].width);
}
ceil()
の結果で関数を使用することsizeWithAttributes:
は、Appleのドキュメントで推奨されています。
「このメソッドは小数サイズを返します。返されたサイズをサイズビューに使用するには、ceil関数を使用してその値を最も近い整数に上げる必要があります。」
// In swift 2.0
let lblDescription = UILabel(frame: CGRectMake(0, 0, 200, 20))
lblDescription.numberOfLines = 0
lblDescription.text = "Sample text to show its whatever may be"
lblDescription.sizeToFit()
// Its automatically Adjust the height
これらのオプションを試してください、
UIFont *myFont = [UIFont boldSystemFontOfSize:15.0];
// Get the width of a string ...
CGSize size = [@"Some string here" sizeWithFont:myFont];
// Get the width of a string when wrapping within a particular width
NSString *mystring = @"some strings some string some strings...";
CGSize size = [mystring sizeWithFont:myFont
forWidth:150.0
lineBreakMode:UILineBreakModeWordWrap];
[label sizeToFit];
この方法を使用して、2つのラベルのフレームを次のように設定することもできます。
[firstLabel sizeToFit];
[secondLabel sizeToFit];
secondLabel.frame = CGRectMake(CGRectGetMaxX(firstLabel.frame), secondLabel.origin.y, secondLabel.frame.size.width, secondLabel.frame.size.height);
sizeWithFont constrainedToSize:lineBreakMode:
使用する元の方法です。使用方法の例を以下に示します。
//Calculate the expected size based on the font and linebreak mode of your label
CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
ビュー、xib、またはセルで制約を使用する場合は、
[LBl sizeToFit];
それが機能していない場合は
dispatch_async(dispatch_get_main_queue(), ^{
[LBl sizeToFit];
});
次のことを試してください。
/* Consider these two labels as the labels that you use,
and that these labels have been initialized */
UILabel* firstLabel;
UILabel* secondLabel;
CGSize labelSize = [firstLabel.text sizeWithFont:[UIFont systemFontOfSize:12]];
//change the font size, or font as per your requirements
CGRect firstLabelRect = firstLabel.frame;
firstLabelRect.size.width = labelSize.width;
//You will get the width as per the text in label
firstLabel.frame = firstLabelRect;
/* Now, let's change the frame for the second label */
CGRect secondLabelRect;
CGFloat x = firstLabelRect.origin.x;
CGFloat y = firstLabelRect.origin.y;
x = x + labelSize.width + 20; //There are some changes here.
secondLabelRect = secondLabel.frame;
secondLabelRect.origin.x = x;
secondLabelRect.origin.y = y;
secondLabel.frame = secondLabelRect;