3

UINavigationController に 2 行のタイトル バーを追加しようとしました

文字列の長さに応じて自動的に設定されるフォントサイズを調整したい.文字列の最大サイズが60になる.次のコードで実装しようとしています

UILabel *bigLabel = [[UILabel alloc] init];
bigLabel.text = @"1234567890 1234567890 1234567890 1234567890 1234567890 123456";
bigLabel.backgroundColor = [UIColor clearColor];
bigLabel.textColor = [UIColor whiteColor];
bigLabel.font = [UIFont boldSystemFontOfSize:20];
bigLabel.adjustsFontSizeToFitWidth = YES;
bigLabel.clipsToBounds = NO;
bigLabel.numberOfLines = 2;
bigLabel.textAlignment = ([self.title length] < 10 ? NSTextAlignmentCenter : NSTextAlignmentLeft);
[bigLabel sizeToFit];

self.navigationItem.titleView = bigLabel;

私にはうまくいきませんでした。助けてください。iPhone と iPad の画面用にこれを作成する必要があります

4

2 に答える 2

11

setNumberOfLines: の0を設定するだけですUILabel。以下の例を参照してください。

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[label setBackgroundColor:[UIColor clearColor]];
[label setNumberOfLines:0];
[label setTextColor:[UIColor whiteColor]];
[label setTextAlignment:NSTextAlignmentCenter];
[label setText:@"1234567890 1234567890 1234567890 1234567890 1234567890 123456"];
self.navigationItem.titleView = label;

ここに画像の説明を入力

左と右を設定UIBarButtonItems- 追加できます。

UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc]initWithTitle:@"Left" style:UIBarButtonItemStylePlain target:self action:@selector(leftPress:)];
self.navigationItem.leftBarButtonItem = leftBarButton;

UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc]initWithTitle:@"Right" style:UIBarButtonItemStylePlain target:self action:@selector(rightPress:)];
self.navigationItem.rightBarButtonItem = rightBarButton;

FontSizeのも減らしLabelます。この場合は12です。次のようになります。

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

拡張された質問の場合:

前のコードにいくつかの変更を加えるだけです-

[label setNumberOfLines:2]; //Set it 2 instead of 0

NSString *titleStr = @"3456456676456464554541223434484384233456744444444456785643367";

//Check your string length then set font according to it.
//I have set font size according to your requirement
//which is 0-60.

if([titleStr length]>40 && [titleStr length]<=52){
    [label setFont:[UIFont fontWithName:@"Arial" size:13.0]];
}
else if([titleStr length]>52){
    [label setFont:[UIFont fontWithName:@"Arial" size:11.5]];
}

[label setText:titleStr];

注:adjustsFontSizeToFitWidth:のプロパティを使用することはできません。これは、条件で処理する必要がある場合にUILabelは機能しないためです。setNumberOfLines:0if

これは、その に従ってset fontSizeOf のメソッドです。UILabelwidth

[label setNumberOfLines:1];
label.adjustsFontSizeToFitWidth = YES;
label.minimumFontSize = 1.0;
于 2012-10-20T05:14:19.310 に答える
2

そのような解決策を提供してくれた@TheTigerに感謝します。
私の要件に従って彼の答えを編集しました。だからここに私の答えがあります

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[label setBackgroundColor:[UIColor clearColor]];
[label setTextColor:[UIColor whiteColor]];
[label setTextAlignment:NSTextAlignmentCenter];
NSString *titleStr1 = @"1234567890 1234567890 1234567890 1234567890 123 4568";
NSString *titleStr  = @"I am a computer engineer. I wa";
NSLog(@"%d", [titleStr length]);

if([titleStr length]>40 && [titleStr length]<=50){
    [label setNumberOfLines:2]; 
    [label setFont:[UIFont boldSystemFontOfSize:13]];
}
else if([titleStr length]>30 && [titleStr length]<=40){
    [label setNumberOfLines:2]; 
    [label setFont:[UIFont boldSystemFontOfSize:16]];
}
else if([titleStr length]>50){
    [label setNumberOfLines:2]; 
    [label setFont:[UIFont boldSystemFontOfSize:10]];
}
else{
    [label setFont:[UIFont boldSystemFontOfSize:20]];
    [label setAdjustsFontSizeToFitWidth:YES];
}
[label setText:titleStr];
self.navigationItem.titleView = label;
于 2012-10-21T09:46:44.310 に答える