2015-04-20 10 views
6

Nie wydaje się, aby rozmiar instrinetyzowany UIButton i/lub sizeToFit uwzględniał lewostronny inset tytułu lub coś było popsute moimi oczekiwaniami.Nieprawidłowy rozmiar UIButton z wstawką obrazu i tytułu

Aby zademonstrować, mam dwa niestandardowe przyciski w widoku, oba z tytułem "Przycisk". Chcę dodać obraz do przycisku po lewej stronie tytułu.

var image = UIImage(named: "circledPlay") 
    image = image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) 

    self.button1.setImage(image, forState: UIControlState.Normal) 
    self.button1.invalidateIntrinsicContentSize() 
    self.button1.sizeToFit() 

    self.button2.setImage(image, forState: UIControlState.Normal) 
    self.button2.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0) 
    self.button2.invalidateIntrinsicContentSize() 
    self.button2.sizeToFit() 

Wynik jest następujący:

screen shot

Uwaga drugi przycisk jest obcięty.

Moje pytanie brzmi, czy ktokolwiek to widział wcześniej (i mam nadzieję, że ma rozwiązanie), czy jestem zdezorientowany i zachowuje się zgodnie z oczekiwaniami (i mam nadzieję, że zna właściwą drogę)?

+0

Można podklasować Uibutton i zastąpić wewnętrznąContentsSize. –

Odpowiedz

9

Zgodnie z informacją w dokumentacji dla: titleEdgeInsets: "Przycisk nie używa tej właściwości do określenia intrinsicContentSize i sizeThatFits:". Zatem ustawienie titleEdgeInsets powoduje tylko przesuwanie etykiety tytułu, ale nie wpływa na rozmiar przycisku. Jeśli chcesz, aby przycisk zawierał więcej wypełnienia wokół treści, ustaw także contentEdgeInsets. Nie sądzę, że musisz zadzwonić pod numer sizeToFit lub invalidateIntrinsicContentSize (ale nie jestem tego pewien).

+0

Wydaje się, że RTFM stosuje się wtedy, ponieważ tęskniłem za tym. Nie mogę powiedzieć, że myślę, że ma to sens, jeśli świat autolayout będzie uważany za prawidłowe zachowanie, ale takie właśnie jest. Sądzę, że powinienem otworzyć radar tak bardzo. Dzięki. – vagrant

+0

@vagrant, Właściwie myślę, że ma to sens w świecie automatycznego układu. Korzystanie z tych 2 właściwości pozwala dopasować wypełnienie wokół zawartości przycisku i umieszczenie tytułu (i obrazu) bez konieczności ustawiania jawnej szerokości przycisku, tak aby mógł on nadal rozszerzać się lub kurczyć odpowiednio, gdy długość tytuł się zmienia. – rdelmar

Powiązane problemy