Apakah mungkin untuk menyesuaikan posisi x, y untuk titleLabel dari UIButton?


121

Apakah mungkin untuk menyesuaikan posisi x, y untuk titleLabeldari a UIButton?

Ini kode saya:

    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
Pilih jawaban lain agar kami dapat menghapus jawaban yang sangat negatif. Atau jelaskan mengapa Anda melakukan ini.
tchrist

1
Mengapa jawaban itu tidak diterima?
Antonio MG

Jawaban:


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)];

Dan di Swift

//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)

Cepat 5

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

3
ini jelas merupakan jawaban terbaik
greenisus

3
Saya bertanya-tanya mengapa penanya memilih jawaban lain. Yang ini jauh lebih baik.
Joshua

4
Saya bahkan tidak membutuhkan dua baris pertama ... hanya setTitleEdgeInsets:itu yang saya rasa perlu untuk menggeser teks.
ArtOfWarfare

Ini pasti benar, tetapi mungkin lebih mudah dilakukan dengan menggunakan pembuat antarmuka (seperti yang dijelaskan dalam jawaban saya).
eladleb

Dua baris pertama memposisikan teks Anda ke 0,0 (x, y). Ini dapat mencegah pemosisian relatif; terutama jika Anda menyetel perataan default di xib.
Jarrett Barnett

40

Cara termudah untuk melakukannya secara visual adalah dengan menggunakan pemeriksa atribut ** (muncul saat mengedit xib / storyboard), menyetel properti " edge " ke judul, menyesuaikan sisipannya, lalu menyetel properti "edge" ke gambar, dan menyesuaikannya . Biasanya lebih baik daripada mengkodekannya, karena lebih mudah dipelihara dan sangat visual.

Atribut inspektur pengaturan


1
Baik tip untuk perubahan Edgeuntuk Titlekemudian menyesuaikan inset!
Dean

Untuk referensi di masa mendatang, sejak Xcode 8, alih-alih mengatur edgeproperti, Anda dapat menyesuaikan insets judul di Size Inspector.
dbmrq

14

Berasal dari UIButton dan terapkan metode berikut:

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

Edit:

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

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

Terima kasih, inilah yang sebenarnya saya butuhkan. Pemusatan otomatis tidak cukup.
dmzza

4

Untuk proyek saya, saya memiliki utilitas ekstensi ini:

extension UIButton {

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

}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.