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.