7

私は SO で ~10 の質問を見てきましたが、まだ不足しています。

通常、次のようにレンダリングされる複数行の UILabel (Interface Builder で作成され、numberOfLines が 0 に設定) があります。

ここに画像の説明を入力

「利用規約」と「プライバシー ポリシー」に下線を引きたいので、次のコードを追加しました。

NSString *text = self.agreement.text;
NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:text];

NSRange privacyRange = [text rangeOfString:@"privacy policy" options:NSCaseInsensitiveSearch];
[aString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:privacyRange];

NSRange tosRange = [text rangeOfString:@"terms of service" options:NSCaseInsensitiveSearch];
[aString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:tosRange];

self.agreement.attributedText = aString;

しかし、結果は次のようになります。

ここに画像の説明を入力

適切な範囲に下線が引かれ、両方の行が表示されるようにするにはどうすればよいですか?

また、OHAttributedLabel や TTTAttributedLabel などのサード パーティ ライブラリを使用したくないのは、アプリ内でテキストに下線を引く必要がある唯一の場所だからです。

私が試したこと

  • sizeToFit属性付きテキストを設定した後の呼び出し
  • 代わりに UITextView を使用します。両方の線が正しくレンダリングされましたが、中央揃えが失われました。
  • リセットnumberOfLineslineBreakModeコード内

Sascha から、背景色をクリア以外に設定した 2 つのスクリーンショットをアップロードするように依頼されました。奇妙なことに、すべてが期待どおりに表示されます。これをどう解釈すべきか、あるいはこれが何を伝えているのかわからない。

ここに画像の説明を入力

4

2 に答える 2

0

昨日、tsafrir のコメント (iOS 7 のバグ、7.1 で修正する必要があります) に基づいて、2 行を 2 つのラベルに分割して先に進みました。

次に、SashaHameister は、透明でない背景色を適用するとどうなるかを確認することを勧めました。そこで、一番上のラベルを削除し、テキストを 2 番目のラベルに追加して 2 行にし、背景色を変更し、両方の行をきれいにレンダリングしました。それが解決策だと思いました(明確な背景が必要だったので機能しませんでしたが)。

その後、クリアに戻してテストしましたが、それでもうまくいきました。ラベルのサイズと関係があることがわかりました。私の 2 行ラベルの高さは ~75 で、11pt フォントの 2 行ラベルには必要以上でした。昨日行った調整 (行を 2 つのラベルに分割) により、最初のラベルのテキストをコピーして 2 番目のラベルに貼り付けると、高さは 48px になり、問題なくレンダリングされます。

これがなぜこのような影響を与えるのかはまだわかりませんが、同じ問題が発生している場合は、ラベルの高さが必要以上に大きい可能性があります。できるだけ減らして、実際のテキストにできるだけ密着させてください。

于 2014-03-07T16:30:00.717 に答える