2010-09-11 11 views
9

mam UIViewController skonfigurować do wyświetlania informacji przycisk po prawej stronie w swojej UINavigationItem tak:informacji rightBarButtonItem przycisk, nie ma miejsca na prawej

UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
[infoButton addTarget:self action:@selector(toggleAboutView) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:infoButton] autorelease]; 

To działa doskonale, ale jedynym problemem jest to, że pozostaje mi niewiele ma miejsca na prawo od przycisku, który wygląda dość brzydki:

Infobutton

Czy jest jakiś sposób na przycisk, aby przesunąć o 5 px się z prawej strony?

Dzięki.

+0

Wygląda prawidłowo rozmieszczony do mnie. Zobacz inne aplikacje na iPhone'a, które umieszczają przycisk po prawej stronie paska nawigacji: Wiadomości, Kalendarz, Kontakty, Mapy itp. Wszystkie są rozmieszczone w ten sam sposób. –

+1

Mój klient chce, aby był dalej, a ten odstęp nie wygląda dobrze za pomocą przycisku informacyjnego. – Emil

+0

Używam tego samego przycisku na pasku nawigacji, ale po lewej zamiast prawej, używając domyślnego odstępu. Dla mnie wygląda dobrze. Jeśli chcesz, aby Twój klient wyświetlał więcej, zapytaj, dlaczego ich aplikacja ma wyglądać zupełnie inaczej niż wszystkie inne aplikacje korzystające z przycisku informacji na pasku nawigacji. –

Odpowiedz

17
infoButton.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 10); 
14

Spróbuj ustawić infoButton.contentEdgeInsets (lub imageEdgeInsets); coś w rodzaju:

infoButton.contentEdgeInsets = (UIEdgeInsets){.right=10}; 

Nie jestem pewien, czy działa dla przycisków "systemowych", ale może.

Jeśli to nie działa, najprostszym sposobem jest prawdopodobnie włożenie go do UIView.

EDIT: Przypuszczalnie Pasek zwraca [customView sizeThatFits:blah], aby dowiedzieć się, jak duży widok „chce być”. Powyższy kod ma oznaczać "dodaj 10-pikselową wstawkę z prawej krawędzi", która dla normalnego przycisku (niestandardowego) powoduje również zwiększenie rozmiaru o 10 pikseli.

Wygląda na to, że UIButton zwraca stały rozmiar dla standardowego przycisku informacji, ignorując wszelkie wstawki. Twój kod "działa", wpływając na metody contentRectForBounds: i imageRectForContentRect: zmienia się tam, gdzie rysowana jest ikona, ale w rzeczywistości nie zmienia jej rozmiaru. Podejrzewam, że ikona rysuje się poza przyciskiem, co może oznaczać, że "dotykalny" rect jest błędny (ale paski narzędzi wydają się zwiększać dotykowe rects dla normalnych UIBarButtonItems, więc może to nie ma znaczenia).

+0

Hah, to działało! Nie mam pojęcia dlaczego, ale zadziałało. Chcesz mi to wyjaśnić? – Emil

+3

EDYCJA: Ten kod nie zrobił tego wszystkiego, musiałem dodać to: \t 'infoButton.contentEdgeInsets = (UIEdgeInsets) {. Left = -10};', albo przycisk byłby po prostu ściśnięty od prawej strony. – Emil

Powiązane problemy