2012-04-17 12 views
5

Używam niestandardowej czcionki dla tytułu UIButton. Działa, z wyjątkiem tej konkretnej czcionki część pierwszego znaku jest obcięta. Na przykład:Cropped UIButton Title

enter image description here

Próbowałem ustawienie contentEdgeInsets i titleEdgeInsets i nie wydaje się uzyskać to nie obcięty. Próbowałem również ustawić właściwość button.titleLabel.clipsToBounds na NIE;

Wszelkie sugestie będą mile widziane.

Odpowiedz

8

Po prostu ustawiłem tytuł UIButton na zero i dodałem własną UILabel jako wyeksplorowanie UIButton. Ustawiłem ramkę UILabel na taki sam rozmiar jak przycisk i ustawiłem ją na środku.

Nie jest to najbardziej eleganckie rozwiązanie, które jestem pewien, ale wykonuje swoją pracę.

+2

To naprawdę jest do bani, że to jedyne rozwiązanie. Dzieje się tak dlatego, że twórcy czcionek celowo kodują granice swoich liter jako mniej niż są w rzeczywistości, aby się zagnieździli. Jest to szczególnie ważne w przypadku kursywy i czcionek kursywnych. Szkoda, że ​​Apple nie byłby tak "precyzyjny" z obliczeniem szerokości etykiety UIButton, a przynajmniej pozwolił nam to zmienić sami. Składam raport o błędzie, powinieneś. – Bek

1

Wygląda na to, że Twoje treści są idealnie dopasowane. Jeśli ramka etykiety nie jest bezpośrednio dostępna, użyj polecenia [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];, aby spróbować rozwiązać problem wyrównania w poziomie.

+0

Właściwie ustawiony jest na środku, jak jest. Jeśli ustawię to w odpowiednim uzasadnieniu, pozostaje ono przycięte. –

9

Chociaż rozwiązanie Jeshua działa dobrze, nie jest to optymalne w moich oczach. Wolałbym polecić podklasę UIButton i nadpisać jej metodę: layoutSubviews.

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGRect frame = self.titleLabel.frame; 
    frame.size.height = self.bounds.size.height; 
    frame.origin.y = self.titleEdgeInsets.top; 
    self.titleLabel.frame = frame; 
} 
+0

To jest naprawdę łatwe do zrobienia, wystarczy utworzyć klasę (podklasy UIButton), skopiować wklej, przypisać do niestandardowej klasy przycisku. Dzięki! –

+0

To powinna być zaakceptowana odpowiedź. Prosty i elegancki. –

+0

perfect Thank you –

0

kod Swift dla powyższej odpowiedzi:

override func layoutSubviews() { 
    super.layoutSubviews() 
    titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height) 
}