テキストに応じてUILabelの高さを調整します


315

UILabel(ダイナミックテキストの長い行)に次のテキストがあるとします。

エイリアン軍はチームをはるかに上回っているので、プレイヤーは、ポストアポカリプスの世界を利用して、ゴミ箱、柱、車、瓦礫、その他の物体の背後にあるカバーを探す必要があります。

UILabel'sテキストが収まるように高さのサイズを変更したいと思います。以下のプロパティを使用UILabelして、テキストを内側に折り返します。

myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;

正しい方向に進んでいない場合はお知らせください。ありがとう。



下のSwiftバージョン:stackoverflow.com/a/33945342/1634890
Juan Boero

回答:


409

sizeWithFont constrainedToSize:lineBreakMode:使用するメソッドです。使用方法の例を以下に示します。

//Calculate the expected size based on the font and linebreak mode of your label
// FLT_MAX here simply means no constraint in height
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);

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;

これは9999を使用しますが、どのようにテキストに柔軟に対応しますか?
Quantumpotato 2012

1
@quantumpotato 9999は、テキストが占有できる最大スペースの単なるプレースホルダーです。そこでは、UIで機能する任意の数を使用できます。
PyjamaSam 2012

9
このようにラベルのサイズを変更している場合は、間違っています。使用する必要があります[label sizeToFit]
マリアンチェルニー

5
それを忘れてはいけないsizeWithFontのiOS 7で廃止されstackoverflow.com/questions/18897896/...
attomos

7
その非推奨。
msmq 2015

242

あなたは正しい方向に進んでいました。あなたがする必要があるのは:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Enter large amount of text here";
[myUILabel sizeToFit];

5
フィットするサイズは、myUILabel.lineBreakMode = UILineBreakModeWordWrap;を使用して、テキストを折り返すのに必要なサイズでした。myUILabel.numberOfLines = 0;
Jack BeNimble

2
正解としてマークされた回答よりもはるかに簡単な解決策であり、同様に機能します。
メモン

4
@Inder Kumar Rathore-私はこれを常に複数行に使用しているため、numberOfLines = 0; 最初に幅を優先する設定が不足していると思いますが、UILabelのinitを使用してすでに行われていると想定しました。
DonnaLea

@ドナ..私はあなたの好みを得ることができない..あなたはそのフレームについて話しているのですか?
Inder Kumar Rathore

@DonnaLea、ありがとうございました。ソリューションへの簡単なアプローチは、私の問題の解決にも役立ちました。
ナビゲート

44

iOS 6では、AppleはUILabelにプロパティを追加して、ラベルの動的な垂直方向のサイズ変更を大幅に簡素化しました:preferredMaxLayoutWidth

このプロパティをlineBreakMode = NSLineBreakByWordWrappingおよびsizeToFitメソッドと組み合わせて使用​​すると、UILabelインスタンスのサイズをテキスト全体に対応する高さに簡単に変更できます。

iOSドキュメントからの引用:

preferredMaxLayoutWidth マルチラインラベルの推奨最大幅(ポイント単位)。

解説 このプロパティは、レイアウト制約が適用されたときにラベルのサイズに影響します。レイアウト時に、テキストがこのプロパティで指定された幅を超える場合、追加のテキストは1つ以上の新しい行に流し込まれ、ラベルの高さが増加します。

サンプル:

...
UILabel *status = [[UILabel alloc] init];
status.lineBreakMode = NSLineBreakByWordWrapping;
status.numberOfLines = 5; // limits to 5 lines; use 0 for unlimited.

[self addSubview:status]; // self here is the parent view

status.preferredMaxLayoutWidth = self.frame.size.width; // assumes the parent view has its frame already set.

status.text = @"Some quite lengthy message may go here…";
[status sizeToFit];
[status setNeedsDisplay];
...

39

コードを1行も追加せずに、この動作を完全に確認してください。(自動レイアウトを使用)

私はあなたの要件に応じてあなたのためにデモを作りました。以下のリンクからダウンロードしてください。

UIViewとUILabelの自動サイズ変更

ステップバイステップガイド:-

ステップ1: UIViewに制約を設定する

1)リーディング2)トップ3)トレーリング(メインビューから)

ここに画像の説明を入力してください

ステップ2:-制約をラベル1に設定

1)リーディング2)トップ3)トレーリング(スーパービューから)

ここに画像の説明を入力してください

ステップ3:-ラベル2に制約を設定

1)リーディング2)トレーリング(そのスーパービューから)

ここに画像の説明を入力してください

ステップ4:- 最もトリッキーなボタンをUIViewからUILabelに与えます。

ここに画像の説明を入力してください

ステップ5:-(オプション)UIButtonに制約を設定する

1)リーディング2)ボトム3)トレーリング4)固定高さ(メインビューから)

ここに画像の説明を入力してください

出力:-

ここに画像の説明を入力してください

注: -Labelプロパティで行数= 0を設定していることを確認してください。

ここに画像の説明を入力してください

この情報が、UILabelの高さによるUIViewの自動サイズ変更とテキストによるUILabelの自動サイズ変更を理解するのに十分であることを願っています。


また、白の背景ビューの下にいくつかのビューが必要な場合はどうでしょうか。高さを指定しないと、「必要な制約:Y位置または高さ」のSBにいくつかの赤い線が表示されます
Bogdan Razvan

これは正解としてマークする必要があります。これはibの正しい方法です。
Rana Tallal

@ SPQR3問題は何ですか?それは多くの人々とその正常な動作に役立ちました。
バダルシャー

36

これをプログラムで行う代わりに、デザイン中にStoryboard / XIBで行うことができます。

  • 属性インスペクタ UIlabelの行数プロパティを0に設定します。
  • 次に、要件に従って、幅制約/(または)先行および後続制約を設定します。
  • 次に、高さの制約最小値で設定します。最後に、追加した高さ制約を選択し、サイズインスペクターで属性インスペクターの隣にある高さ制約の関係を「等しい - より大きい」変更します。

これは、UITableViewのカスタムxibセルに埋め込まれたUILabelで機能します。
Gang Fang

あなたの答えに従って、私は私のラベルに一定の高さを設定し、その優先度を低(250)に設定し、エラーが消えます。(等しく設定する必要はありません-より大きい)
Hamid Reza Ansari

15

助けてくれてありがとう、これは私のために働いている私が試したコードです

   UILabel *instructions = [[UILabel alloc]initWithFrame:CGRectMake(10, 225, 300, 180)];
   NSString *text = @"First take clear picture and then try to zoom in to fit the ";
   instructions.text = text;
   instructions.textAlignment = UITextAlignmentCenter;
   instructions.lineBreakMode = NSLineBreakByWordWrapping;
   [instructions setTextColor:[UIColor grayColor]];

   CGSize expectedLabelSize = [text sizeWithFont:instructions.font 
                                constrainedToSize:instructions.frame.size
                                    lineBreakMode:UILineBreakModeWordWrap];

    CGRect newFrame = instructions.frame;
    newFrame.size.height = expectedLabelSize.height;
    instructions.frame = newFrame;
    instructions.numberOfLines = 0;
    [instructions sizeToFit];
    [self addSubview:instructions];

2
sizeWithFontは非推奨です。
msmq 2015

12

iOS7以前および上記のiOS7の解決策

//
//  UILabel+DynamicHeight.m
//  For StackOverFlow
//
//  Created by Vijay on 24/02/14.
//  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
//

#import <UIKit/UIKit.h>

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

#define iOS7_0 @"7.0"

@interface UILabel (DynamicHeight)

/*====================================================================*/

/* Calculate the size,bounds,frame of the Multi line Label */

/*====================================================================*/
/**
 *  Returns the size of the Label
 *
 *  @param aLabel To be used to calculte the height
 *
 *  @return size of the Label
 */

-(CGSize)sizeOfMultiLineLabel;

@end


//
//  UILabel+DynamicHeight.m
//  For StackOverFlow
//
//  Created by Vijay on 24/02/14.
//  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
//

#import "UILabel+DynamicHeight.h"

@implementation UILabel (DynamicHeight)
/*====================================================================*/

/* Calculate the size,bounds,frame of the Multi line Label */

/*====================================================================*/
/**
 *  Returns the size of the Label
 *
 *  @param aLabel To be used to calculte the height
 *
 *  @return size of the Label
 */
-(CGSize)sizeOfMultiLineLabel{

    NSAssert(self, @"UILabel was nil");

    //Label text
    NSString *aLabelTextString = [self text];

    //Label font
    UIFont *aLabelFont = [self font];

    //Width of the Label
    CGFloat aLabelSizeWidth = self.frame.size.width;


    if (SYSTEM_VERSION_LESS_THAN(iOS7_0)) {
        //version < 7.0

        return [aLabelTextString sizeWithFont:aLabelFont
                            constrainedToSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                lineBreakMode:NSLineBreakByWordWrapping];
    }
    else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(iOS7_0)) {
        //version >= 7.0

        //Return the calculated size of the Label
        return [aLabelTextString boundingRectWithSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{
                                                        NSFontAttributeName : aLabelFont
                                                        }
                                              context:nil].size;

    }

    return [self bounds].size;

}

@end

UITableViewControllerのサブクラスでは、このメソッドをどこで呼び出す必要がありますか?
Homam、2014年

ラベルの高さを計算する場所で、このメソッドを呼び出します。次に、テーブルビューの高さを調整します。インデックスメソッドで行のテーブルビューの高さがある場所。必要に応じてすべての垂直ラベルテキストを計算します
Vijay-Apple-Dev.blogspot.com '

Vijay sizeWithFontは廃止されました。
user3182143 2018年

10

sizeWithFontは非推奨であるため、代わりにこれを使用します。

これはラベル固有の属性を取得します。

-(CGFloat)heightForLabel:(UILabel *)label withText:(NSString *)text{

    NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName:label.font}];
    CGRect rect = [attributedText boundingRectWithSize:(CGSize){label.frame.size.width, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];

    return ceil(rect.size.height);
}

6

これはカテゴリバージョンです。

UILabel + AutoSize.h #import

@interface UILabel (AutoSize)

- (void) autosizeForWidth: (int) width;

@end

UILabel + AutoSize.m

#import "UILabel+AutoSize.h"

@implementation UILabel (AutoSize)

- (void) autosizeForWidth: (int) width {
    self.lineBreakMode = UILineBreakModeWordWrap;
    self.numberOfLines = 0;
    CGSize maximumLabelSize = CGSizeMake(width, FLT_MAX);
    CGSize expectedLabelSize = [self.text sizeWithFont:self.font constrainedToSize:maximumLabelSize lineBreakMode:self.lineBreakMode];
    CGRect newFrame = self.frame;
    newFrame.size.height = expectedLabelSize.height;
    self.frame = newFrame;
}

@end

6

TableViewController's (UITableViewCell *)tableView:cellForRowAtIndexPath 次の方法でメソッドを実装できます(例)。

#define CELL_LABEL_TAG 1

- (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *text = @"my long text";

    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero  reuseIdentifier:identifier] autorelease];
    }

    CGFloat width = [UIScreen mainScreen].bounds.size.width - 50;
    CGFloat height = [self textHeight:text] + 10;
    CGRect frame = CGRectMake(10.0f, 10.0f, width, height);

    UILabel *cellLabel = [[UILabel alloc] initWithFrame:frame];
    cellLabel.tag = CELL_LABEL_TAG;
    cellLabel.textColor = [UIColor blackColor];
    cellLabel.backgroundColor = [UIColor clearColor];
    cellLabel.textAlignment = UITextAlignmentLeft;
    cellLabel.font = [UIFont systemFontOfSize:12.0f];
    [cell.contentView addSubview:cellLabel];
    [cellLabel release];

    return cell;
}

UILabel *label = (UILabel *)[cell viewWithTag:CELL_LABEL_TAG];
label.text = text;
label.numberOfLines = 0;
[label sizeToFit];
return cell;

また、NSStringsizeWithFont:constrainedToSize:lineBreakMode:メソッドを使用して、テキストの高さを計算します。


6

基づいてUILabel拡張子この回答のためスウィフト4以上

extension UILabel {

    func retrieveTextHeight () -> CGFloat {
        let attributedText = NSAttributedString(string: self.text!, attributes: [NSFontAttributeName:self.font])

        let rect = attributedText.boundingRect(with: CGSize(width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil)

        return ceil(rect.size.height)
    }

}

次のように使用できます:

self.labelHeightConstraint.constant = self.label.retrieveTextHeight()

4

そして、iOS 8に移行する人のために、Swiftのクラス拡張を以下に示します。

extension UILabel {

    func autoresize() {
        if let textNSString: NSString = self.text {
            let rect = textNSString.boundingRectWithSize(CGSizeMake(self.frame.size.width, CGFloat.max),
                options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                attributes: [NSFontAttributeName: self.font],
                context: nil)
            self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, rect.height)
        }
    }

}

4

私にとって最も効果的で簡単な方法は、ラベルに高さの制約を適用し、優先順位をストーリーボードで(250)に設定することでした。

ストーリーボードのおかげで、プログラムで高さと幅を計算する必要はありません。


4

UILabelの動的な高さを計算する私のアプローチ。

    let width = ... //< width of this label 
    let text = ... //< display content

    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.preferredMaxLayoutWidth = width

    // Font of this label.
    //label.font = UIFont.systemFont(ofSize: 17.0)
    // Compute intrinsicContentSize based on font, and preferredMaxLayoutWidth
    label.invalidateIntrinsicContentSize() 
    // Destination height
    let height = label.intrinsicContentSize.height

ラップして機能:

func computeHeight(text: String, width: CGFloat) -> CGFloat {
    // A dummy label in order to compute dynamic height.
    let label = UILabel()

    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.font = UIFont.systemFont(ofSize: 17.0)

    label.preferredMaxLayoutWidth = width
    label.text = text
    label.invalidateIntrinsicContentSize()

    let height = label.intrinsicContentSize.height
    return height
}

3

更新された方法

+ (CGFloat)heightForText:(NSString*)text font:(UIFont*)font withinWidth:(CGFloat)width {

    CGSize constraint = CGSizeMake(width, 20000.0f);
    CGSize size;

    CGSize boundingBox = [text boundingRectWithSize:constraint
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:@{NSFontAttributeName:font}
                                                  context:nil].size;

    size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));

    return size.height;
}

3

これは、Objective-cを使用してUILabel Heightを取得するコードの1行です。

labelObj.numberOfLines = 0;
CGSize neededSize = [labelObj sizeThatFits:CGSizeMake(screenWidth, CGFLOAT_MAX)];

.heightを使用すると、次のようにラベルの高さがわかります。

neededSize.height

現在の最良の答え。
マイク

3

以下のコードを使用して高さを取得できます

あなたはパスする必要があります

  1. テキスト2.フォント3.ラベルの幅

    func heightForLabel(text: String, font: UIFont, width: CGFloat) -> CGFloat {
    
       let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
       label.numberOfLines = 0
       label.lineBreakMode = NSLineBreakMode.byWordWrapping
       label.font = font
       label.text = text
       label.sizeToFit()
    
       return label.frame.height
    }

2

この投稿をありがとう。それは私を大いに助けました。私の場合、テキストを別のビューコントローラーで編集しています。私が使用すると次のことに気づきました:

[cell.contentView addSubview:cellLabel];

tableView:cellForRowAtIndexPath:メソッドで、セルを編集するたびに、前のビューの上にラベルビューが継続的にレンダリングされました。テキストはピクセル化され、何かが削除または変更されると、前のバージョンが新しいバージョンの下に表示されていました。これが私が問題を解決した方法です:

if ([[cell.contentView subviews] count] > 0) {
    UIView *test = [[cell.contentView subviews] objectAtIndex:0];
    [test removeFromSuperview];
}
[cell.contentView insertSubview:cellLabel atIndex:0];

変なレイヤーはもうありません。これを処理するより良い方法がある場合は、お知らせください。


2
UILabel *itemTitle = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10,100, 200.0f)];
itemTitle.text = @"aseruy56uiytitfesh";
itemTitle.adjustsFontSizeToFitWidth = NO;
itemTitle.autoresizingMask = UIViewAutoresizingFlexibleWidth;
itemTitle.font = [UIFont boldSystemFontOfSize:18.0];
itemTitle.textColor = [UIColor blackColor];
itemTitle.shadowColor = [UIColor whiteColor];
itemTitle.shadowOffset = CGSizeMake(0, 1);
itemTitle.backgroundColor = [UIColor blueColor];
itemTitle.lineBreakMode = UILineBreakModeWordWrap;
itemTitle.numberOfLines = 0;
[itemTitle sizeToFit];
[self.view addSubview:itemTitle];

ここでこれを使用して、すべてのプロパティをラベルで使用し、itemTitle.textのテキストを増やしてテストします。

itemTitle.text = @"diofgorigjveghnhkvjteinughntivugenvitugnvkejrfgnvkhv";

必要に応じて、perfetcの回答が表示されます


2

メソッドとしても使用できます。@Pyjamasamは非常に真実なので、私はそのメソッドを作成しています。それは他の誰かのために役立つかもしれません

-(CGRect)setDynamicHeightForLabel:(UILabel*)_lbl andMaxWidth:(float)_width{
    CGSize maximumLabelSize = CGSizeMake(_width, FLT_MAX);

    CGSize expectedLabelSize = [_lbl.text sizeWithFont:_lbl.font constrainedToSize:maximumLabelSize lineBreakMode:_lbl.lineBreakMode];

    //adjust the label the the new height.
    CGRect newFrame = _lbl.frame;
    newFrame.size.height = expectedLabelSize.height;
    return newFrame;
}

このように設定します

label.frame = [self setDynamicHeightForLabel:label andMaxWidth:300.0];

2

Swift3でこれを行うには、次のコードを使用します。

 let labelSizeWithFixedWith = CGSize(width: 300, height: CGFloat.greatestFiniteMagnitude)
            let exactLabelsize = self.label.sizeThatFits(labelSizeWithFixedWith)
            self.label.frame = CGRect(origin: CGPoint(x: 20, y: 20), size: exactLabelsize)

2

上記の回答に追加:

これは、ストーリーボードを介して簡単に実現できます。

  1. UILabelの制約を設定します(私の場合、上、左、固定幅を設定しました)
  2. 属性インスペクターで行数を0に設定
  3. 属性インスペクタで改行をWordWrapに設定します。

UILabel高さ調整


1

一行はクリスの答えが間違っています。

newFrame.size.height = maximumLabelSize.height;

する必要があります

newFrame.size.height = expectedLabelSize.height;

それ以外は、それが正しい解決策です。


1

最後に、うまくいきました。君たちありがとう。

heightForRowAtIndexPathメソッドでラベルのサイズを変更しようとしたため、機能しませんでした:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

そして(ええ愚かな私)、私はcellForRowAtIndexPathメソッドのラベルをデフォルトにサイズ変更していました-私は以前に書いたコードを見落としていました:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

1
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cellIdentifier = @"myCell";
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    cell.myUILabel.lineBreakMode = UILineBreakModeWordWrap;        
    cell.myUILabel.numberOfLines = 0;
    cell.myUILabel.text = @"Some very very very very long text....."
    [cell.myUILabel.criterionDescriptionLabel sizeToFit];    
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    CGFloat rowHeight = cell.myUILabel.frame.size.height + 10;

    return rowHeight;    
}

2
ソリューションがOPの問題をどのように解決するかについて説明を追加できますか?

1
UITableViewCell * cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]を要求することはできません。heightForRowAtIndexPathでは、無限ループが発生します
Peter Lapisu 2013年

1
NSString *str = @"Please enter your text......";
CGSize lblSize = [str sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize: CGSizeMake(200.0f, 600.0f) lineBreakMode: NSLineBreakByWordWrapping];

UILabel *label = [[UILabel alloc]init];
label.frame = CGRectMake(60, 20, 200, lblSize.height);
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.font = [UIFont systemFontOfSize:15];
label.text = str;
label.backgroundColor = [UIColor clearColor];
[label sizeToFit];
[self.view addSubview:label];

1

私のコード:

UILabel *label      = [[UILabel alloc] init];
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.text          = text;
label.textAlignment = NSTextAlignmentCenter;
label.font          = [UIFont fontWithName:_bodyTextFontFamily size:_bodyFontSize];

CGSize size = [label sizeThatFits:CGSizeMake(width, MAXFLOAT)];


float height        = size.height;
label.frame         = CGRectMake(x, y, width, height);

1

この方法は完璧な高さを与えます

-(float) getHeightForText:(NSString*) text withFont:(UIFont*) font andWidth:(float) width{
CGSize constraint = CGSizeMake(width , 20000.0f);
CGSize title_size;
float totalHeight;


title_size = [text boundingRectWithSize:constraint
                                options:NSStringDrawingUsesLineFragmentOrigin
                             attributes:@{ NSFontAttributeName : font }
                                context:nil].size;

totalHeight = ceil(title_size.height);

CGFloat height = MAX(totalHeight, 40.0f);
return height;
}

明確な帰属がない限り、他の場所からコンテンツをコピーしないでください。それは盗作と見なされます。参照してくださいstackoverflow.com/help/referencingstackoverflow.com/a/25158206/444991を)。
マット

1

スウィフト2:

    yourLabel.text = "your very long text"
    yourLabel.numberOfLines = 0
    yourLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    yourLabel.frame.size.width = 200
    yourLabel.frame.size.height = CGFloat(MAXFLOAT)
    yourLabel.sizeToFit()

興味深い行はsizeToFit()、a frame.size.heightをmax floatに設定することと関連しています。これは長いテキストのためのスペースを提供しますがsizeToFit()、必要なものだけを使用するように強制しますが、常にを設定した後にそれを呼び出します.frame.size.height

.backgroundColorデバッグ目的でを設定することをお勧めします。これにより、ケースごとにレンダリングされているフレームを確認できます。


1
yourLabel.frame.height取得専用のプロパティです
Phil Hudson

2
yourLabel.frame.size.widthとyourLabel.frame.size.heightも読み取り専用です
CalZone

1
myLabel.text = "your very long text"
myLabel.numberOfLines = 0
myLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping

左上、右下など、ストーリーボードでUILableの制約を設定してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.