2

下のラベル (黄色) を 1 行ではなく、少なくとも 2 行にしたいと考えています。

問題

Use AutolayoutInterface Builderでチェックを外したことを確認しました。を 0 から 2に設定すると、numberOfLines2 つの単語が重なり合い、黄色の背景が単語にぴったりとはまります。が であっても であっても結果は同じlineBreakModeです。の結果を使って項ラベルの枠を設定してもしなくても同じですし、使っても使わなくても同じです。また、ラベルを のサブクラスではなくにしようとしましたが、結果は同じです。NSLineBreakByWordWrappingNSLineBreakByTruncatingTailsizeWithAttributessizeToFitUILabelUILabelTTTAttributedLabel

_termsLabel.font = [UIFont systemFontOfSize:12];
_termsLabel.textColor = [UIColor grayColor];
_termsLabel.textAlignment = NSTextAlignmentCenter;
_termsLabel.lineBreakMode = NSLineBreakByWordWrapping;
_termsLabel.numberOfLines = 0;
_termsLabel.delegate = self;
_termsLabel.backgroundColor = [UIColor yellowColor];

// Terms label
NSString *termsText = [NSString stringWithFormat:@"%@ %@ %@ %@", NSLocalizedString(@"TermsIAgree", nil),
                                                                 NSLocalizedString(@"SettingsTOS", nil),
                                                                 NSLocalizedString(@"LocalizedAnd", nil),
                                                                 NSLocalizedString(@"SettingsPrivacyPolicy", nil)];

_termsLabel.text = termsText;
_termsLabel.linkAttributes = @{ (__bridge NSString *)kCTUnderlineStyleAttributeName : [NSNumber numberWithBool:YES]};
CGSize termsSize = [_termsLabel.text sizeWithAttributes: @{ NSFontAttributeName : _termsLabel.font}];
_termsLabel.frame = CGRectMake(65,
                               395,
                               termsSize.width, termsSize.height);

[_termsLabel addLinkToURL:[NSURL URLWithString:TOS_URL] withRange:[termsText rangeOfString:NSLocalizedString(@"SettingsTOS", nil)]];
[_termsLabel addLinkToURL:[NSURL URLWithString:PRIVACY_POLICY_URL] withRange:[termsText rangeOfString:NSLocalizedString(@"SettingsPrivacyPolicy", nil)]];

EDIT : を使用して用語テキストサイズを見つけることにより、is then CGSize termsSize = [_termsLabel.text sizeWithFont:_termsLabel.font forWidth:200 lineBreakMode:NSLineBreakByWordWrapping]; 、結果は1行だけになります:heighttermsSize14

ここに画像の説明を入力

どうすれば2行目を取得できますか? 解決策この時点で、追加するだけ[_termsLabel sizeToFit]です。

4

2 に答える 2

2

静的テキストがある場合は、ブレーク モードを折り返しに設定し、必要な行数に設定し、希望する方法で折り返されるまでインターフェイス ビルダーでラベルのフレームを調整します。動的テキストを取得したらsizeToFit、ラベルのテキストを設定した後に使用して、指定された幅に合わせて高さを自動的に調整できます。

  1. フレームを希望の最大幅に設定
  2. 行を 0 に設定
  3. ブレークモードをラップに設定
  4. 電話sizeToFit
于 2013-08-31T23:04:17.717 に答える
1

ラベルの最大幅を決定し、sizeWithFont:forWidth:lineBreakMode:この値を使用してメソッドを試しNSLineBreakMode、結果の文字列の境界ボックスのサイズを取得する必要があります。

于 2013-08-31T22:01:41.443 に答える