UIButtonのtitleLabelのx、y位置を調整することは可能ですか?


121

それはのためのx、yの位置を調整することが可能になるtitleLabelのをUIButton

これが私のコードです:

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [btn setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i+1] forState:UIControlStateNormal];     
    [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    btn.titleLabel.frame = ???

1
非常に否定的な答えを削除できるように、他の答えを選択してください。または、これを行った理由を説明してください。
tchrist

1
なぜその答えは受け入れられないのですか?
Antonio MG

これはあなたが必要とするすべてであるstackoverflow.com/questions/18484747/uibutton-titleedgeinsets

回答:


445
//make the buttons content appear in the top-left
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];

//move text 10 pixels down and right
[button setTitleEdgeInsets:UIEdgeInsetsMake(10.0f, 10.0f, 0.0f, 0.0f)];

そしてスウィフトでは

//make the buttons content appear in the top-left
button.contentHorizontalAlignment = .Left
button.contentVerticalAlignment = .Top

//move text 10 pixels down and right
button.titleEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 0.0, 0.0)

スウィフト5

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.titleEdgeInsets = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 0.0, right: 0.0)

3
これは間違いなく最良の答えです
greenisus

3
なぜ質問者は他の答えを選んだのかしら。これははるかに優れています。
ジョシュア

4
最初の2行すら必要ありませんでした... setTitleEdgeInsets:テキストを移動するために必要なのは、これだけでした。
ArtOfWarfare 2013年

これは間違いなく正しいですが、(私の回答で説明されているように)インターフェースビルダーを使用すると、おそらく簡単に達成できます。
eladleb 2013

最初の2行はテキストを0,0(x、y)に配置します。これにより、相対的な配置ができなくなります。特に、xibでデフォルトの配置を設定した場合。
Jarrett Barnett、2013

40

視覚的に行う最も簡単な方法は、属性インスペクター**(xib /ストーリーボードの編集時に表示されます)を使用し、「エッジ」プロパティをタイトルに設定し、インセットを調整してから、「エッジ」プロパティを画像に設定し、それに応じて調整することです。 。保守が容易で視覚的に優れているため、通常はコーディングよりも優れています。

属性インスペクターの設定


1
変更してEdgeからTitleインセットを調整するための良いヒント!
ディーン

Xcode 8以降の参照用に、edgeプロパティを設定する代わりに、サイズインスペクターでタイトルインセットを調整できます。
dbmrq 2018

14

UIButtonから派生し、次のメソッドを実装します。

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

編集:

@interface PositionTitleButton : UIButton
@property (nonatomic) CGPoint titleOrigin;
@end

@implementation PositionTextButton
- (CGRect)titleRectForContentRect:(CGRect)contentRect {
  contentRect.origin = titleOrigin;
  return contentRect;
}
@end

ありがとう、これが私が実際に必要なものです。自動センタリングでは不十分でした。
dmzza 2014

4

私のプロジェクトでは、この拡張ユーティリティを使用しています。

extension UIButton {

    func moveTitle(horizontal hOffset: CGFloat, vertical vOffset: CGFloat) {
        self.titleEdgeInsets.left += hOffset
        self.titleEdgeInsets.top += vOffset
    }

}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.