[解決済み] UILabelにスペース/パディングを追加する
質問
を持っています。
UILabel
上と下にスペースを追加したいところ。制約の中で最小の高さで、修正しました。
これを実現するために、私は
override func drawTextInRect(rect: CGRect) {
var insets: UIEdgeInsets = UIEdgeInsets(top: 0.0, left: 10.0, bottom: 0.0, right: 10.0)
super.drawTextInRect(UIEdgeInsetsInsetRect(rect, insets))
}
しかし、2行以上書くと問題が同じになるので、別の方法を探さなければなりません。
解決方法は?
UILabelをサブクラス化せず、そのまま使いたい場合。 ムンディが明確な解決策を提示しています .
UIViewでUILabelをラップすることを避けたい場合は、UITextViewを使用してUIEdgeInsets(パディング)を使用できるようにするか、UILabelのサブクラスでUIEdgeInsetsをサポートすることも可能です。
を使うことで UITextView は、インセット(Objective-C)だけを提供すればよいでしょう。
textView.textContainerInset = UIEdgeInsetsMake(10, 0, 10, 0);
のサブクラスを作成することもできます。
UILabel
をオーバーライドすることです。
drawTextInRect
メソッド
(Objective-C)
- (void)drawTextInRect:(CGRect)uiLabelRect {
UIEdgeInsets myLabelInsets = {10, 0, 10, 0};
[super drawTextInRect:UIEdgeInsetsInsetRect(uiLabelRect, myLabelInsets)];
}
さらに、新しいサブクラス化されたUILabelに、TOP、LEFT、BOTTOM、RIGHTのインセット変数を与えることができます。
コード例としては、以下のようなものがあります。
.h(Objective-C)において
float topInset, leftInset,bottomInset, rightInset;
.m(Objective-C)の場合
- (void)drawTextInRect:(CGRect)uiLabelRect {
[super drawTextInRect:UIEdgeInsetsInsetRect(uiLabelRect, UIEdgeInsetsMake(topInset,leftInset,bottomInset,rightInset))];
}
見たところ、UILabelをサブクラス化する際に、intrinsicContentSizeをオーバーライドする必要があるようです。
ということは 固有コンテンツサイズ のようにします。
- (CGSize) intrinsicContentSize {
CGSize intrinsicSuperViewContentSize = [super intrinsicContentSize] ;
intrinsicSuperViewContentSize.height += topInset + bottomInset ;
intrinsicSuperViewContentSize.width += leftInset + rightInset ;
return intrinsicSuperViewContentSize ;
}
そして、インセットを個別に編集するのではなく、以下のメソッドを追加してください。
- (void) setContentEdgeInsets:(UIEdgeInsets)edgeInsets {
topInset = edgeInsets.top;
leftInset = edgeInsets.left;
rightInset = edgeInsets.right;
bottomInset = edgeInsets.bottom;
[self invalidateIntrinsicContentSize] ;
}
UILabelのサイズを更新して、エッジインセットと一致させ、参照した複数行の必要性をカバーします。
少し探したところ、次のようなものが見つかりました。 要旨 を IPInsetLabel と共に使用します。もし、これらの解決策がうまくいかない場合は、これを試してみてください。
この件に関しては、同様の質問(重複)がありました。
利用可能なソリューションの全リストは、この回答を参照してください。
UILabelのテキストマージン
関連
-
[解決済み] リンカーコマンドが終了コード 1 で失敗した(起動を確認するには -v を使用)、Xcode 8、Swift 3
-
[解決済み] Xcodeのロギング。"Metal API Validation Enabled"
-
[解決済み] 脱獄したiphoneで`uicache`コマンドは何をするのですか?[クローズド]
-
[解決済み] SwiftでUIColor patternImageを使用して画像を中心からタイル状に配置する方法
-
[解決済み] React native - connection has no connection handler エラーの意味?
-
[解決済み] BluetoothのロゴはiPhoneのキャラクターとして利用できますか?
-
[解決済み] UILabel 内のテキストを縦に上部に揃える
-
[解決済み] UITextBorderStyleNoneを使用してUITextFieldのパディングを設定する
-
[解決済み】UIScrollView Scrollable Content Size Ambiguity
-
[解決済み] iOSです。オートレイアウトで複数行のUILabelを使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み】arm64アーキテクチャの未定義シンボルについて
-
[解決済み】"宣言はファイルスコープでのみ有効 "について
-
[解決済み] EXC_CORPSE_NOTIFY シンボルのクラッシュが発生しました、追跡するには?
-
[解決済み] 基本的なUIButtonをプログラムで作成するには?
-
[解決済み] SwiftUI vs Interface Builderとストーリーボード【非公開
-
[解決済み] ナビゲーションアイテムのタイトルカラーを変更する方法
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み】UILabelのテキストマージン【重複あり
-
[解決済み] Swift の拡張機能でメソッドをオーバーライドする