1. ホーム
  2. アイオス

[解決済み】UILabelのテキストマージン【重複あり

2022-03-27 15:37:18

質問

の左側インセット/マージンを設定したいのですが。 UILabel が、その方法が見つかりません。ラベルには背景が設定されているので、その原点を変更するだけではうまくいきません。理想は、テキストを 10px などを左側に表示させたい。

解決方法は?

をサブクラス化することで解決しました。 UILabel をオーバーライドし drawTextInRect: のようにします。

- (void)drawTextInRect:(CGRect)rect {
    UIEdgeInsets insets = {0, 5, 0, 5};
    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}

Swift 3.1です。

override func drawText(in rect: CGRect) {
    let insets = UIEdgeInsets.init(top: 0, left: 5, bottom: 0, right: 5)
    super.drawText(in: UIEdgeInsetsInsetRect(rect, insets))
}

Swift 4.2.1です。

override func drawText(in rect: CGRect) {
    let insets = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)
    super.drawText(in: rect.inset(by: insets))
}

お分かりかと思いますが、これは tc.さんの回答 . それに対して、2つの利点があります。

  1. を送信して起動させる必要はありません。 sizeToFit メッセージ
  2. ラベルに背景があり、それを縮めたくない場合に便利です。