web-dev-qa-db-ja.com

iPhone-テキストに応じてUILabelの幅を調整します

テキストに従ってラベルの幅を調整するにはどうすればよいですか?テキストの長さが短い場合は、ラベルの幅を小さくしたい...テキストの長さが短い場合は、そのテキストの長さに応じたラベルの幅が欲しい。出来ますか?

実際には2つのUIラベルがあります。これら二つを近くに配置する必要があります。ただし、最初のラベルのテキストが小さすぎると、大きなギャップが生じます。このギャップを解消したい。

18
Dev
//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; 
38
NANNAV

関数_sizeWithFont:_はiOS 7.0では非推奨であるため、iOS 7.0以降では_sizeWithAttributes:_を使用する必要があります。また、古いバージョンをサポートするために、以下のこのコードを使用できます。

_    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);
    }
_

_sizeWithAttributes:_の結果に対して関数ceil()を使用することは、Appleのドキュメントで推奨されています。

「このメソッドは小数サイズを返します。ビューのサイズを返すために返されたサイズを使用するには、ceil関数を使用して、その値を最も近い大きい整数に上げる必要があります。」

sizeWithAttributes

12
Sihad Begovic
    // 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
4
Vinayak

これらのオプションを試してください、

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);
3
iDev

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;
2
Shanmugaraja G

ビューまたはxibまたはセルで制約を使用する場合にのみ使用します

[LBl sizeToFit];

それが機能しない場合

dispatch_async(dispatch_get_main_queue(), ^{
[LBl sizeToFit];
});
1
jenish

以下を試してください:

/* 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;
0
Ravi Raman