UIButton un titleLabel için x, y konumunu ayarlamak mümkün müdür?


121

Onun için x, y konumunu ayarlamak mümkün mü titleLabela UIButton?

İşte kodum:

    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
Çok olumsuz olanı silebilmemiz için lütfen diğer yanıtı seçin. Ya da bunu neden yaptığınızı açıklayın.
— tchrist

1
Bu cevap neden kabul edilmiyor?
— Antonio MG

Yanıtlar:


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

Ve Swift'de

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

Swift 5

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

3
bu kesinlikle en iyi cevap
— greenisus

3
Soruyu soranın neden diğer yanıtı seçtiğini merak ediyorum. Bu çok daha iyi.
— Joshua

4
İlk iki satıra bile ihtiyacım yoktu ... setTitleEdgeInsets:Metni değiştirmek için tek gerekli bulduğum şeydi.
— ArtOfWarfare

Bu kesinlikle doğrudur, ancak arayüz oluşturucuyu kullanarak başarmak muhtemelen daha kolaydır (cevabımda açıklandığı gibi).
— eladleb

İlk iki satır, metninizi 0,0 (x, y) değerine konumlandırır. Bu, göreceli konumlandırmayı önleyebilir; özellikle xib'de varsayılan hizalamayı ayarlarsanız.
— Jarrett Barnett

40

Bunu görsel olarak yapmanın en kolay yolu , nitelik denetçisini ** (bir xib / film şeridi düzenlerken görünür) kullanmak, " edge " özelliğini başlığa ayarlamak, iç kısımlarını ayarlamak, ardından "edge" özelliğini görüntüye ayarlamak ve buna göre ayarlamaktır. . Bakımı daha kolay ve oldukça görsel olduğu için genellikle kodlamaktan daha iyidir.

Öznitelik denetçisi ayarı


1
Değiştirmek ve ardından eki ayarlamak Edgeiçin iyi bir ipucu Title!
— Dean

İleride başvurmak için, Xcode 8'den beri edgeözelliği ayarlamak yerine Boyut Denetçisi'nde başlık girintilerini ayarlayabilirsiniz.
— dbmrq

14

UIButton'dan türetin ve aşağıdaki yöntemi uygulayın:

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

Düzenle:

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

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

Teşekkürler, gerçekten ihtiyacım olan şey bu. Otomatik merkezleme yeterli değildi.
— dmzza

4

Projelerim için bu uzantı yardımcı programına sahibim:

extension UIButton {

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

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.