7

詳細ビュー コントローラーに UILabel があるので、選択したテーブル行に応じて内容が変わります。問題があります。UILabel に固定幅を設定し、テキストに応じて動的な高さを設定します。これどうやってするの?(間違いを申し訳ありませんが、私は英語ではありません)

4

2 に答える 2

8

私はこれを行うためにサブクラス化するのが好きUILabelです。

AutosizingLabel.h

#import <UIKit/UIKit.h>


@interface AutosizingLabel : UILabel {
    double minHeight;
}

@property (nonatomic) double minHeight;

- (void)calculateSize;

@end    

AutosizingLabel.m

#define MIN_HEIGHT 10.0f

#import "AutosizingLabel.h"

@implementation AutosizingLabel

@synthesize minHeight;

- (id)init {
    if ([super init]) {
        self.minHeight = MIN_HEIGHT;
    }

    return self;
}

- (void)calculateSize {
    CGSize constraint = CGSizeMake(self.frame.size.width, 20000.0f);
    CGSize size = [self.text sizeWithFont:self.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];    

    [self setLineBreakMode:UILineBreakModeWordWrap];
    [self setAdjustsFontSizeToFitWidth:NO];
    [self setNumberOfLines:0];
    [self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, MAX(size.height, MIN_HEIGHT))];

}

- (void)setText:(NSString *)text {  
    [super setText:text];

    [self calculateSize];
}

- (void)setFont:(UIFont *)font {
    [super setFont:font];

    [self calculateSize];
}

@end

これを使用するには、プロジェクトに .h および .m ファイルをインポート/作成します。次にUILabel、コードで作成している場合、次のようになります。

#import "AutosizingLabel.h"

- (void)viewDidLoad {
    [super viewDidLoad];

    AutosizingLabel *label = [[AutosizingLabel alloc] init];
    label.text = @"Some text here";
    [self.view addSubview:label];
}

XIB を使用している場合は、任意の UILabel を選択し、右側のサイドバーの Identity Inspector をクリックして、そのクラスを に設定できますAutosizingLabel。いずれの場合も、.textプロパティを設定すると、ラベルのサイズが自動的に更新されます。

于 2012-05-26T16:37:08.170 に答える
-3

あなたはそれを行うことができます..ここにコードがあります。

UILabel *yourlabel = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 100, sizeToFit)];
yourlabel.numberOfLines = 0;

任意のクエリについてコメントしてください。

于 2012-05-26T16:32:32.147 に答える