2010-09-11 109 views
9

沒有空間我有一個UIViewController設置在右側顯示一個信息按鈕在其UINavigationItem這樣的:rightBarButtonItem信息按鈕,右邊

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

完美的作品,但唯一的問題是,我留下了很少或幾乎沒有空間到按鈕的右側,看起來很醜陋:

Infobutton

有什麼辦法使按鈕出從右側移動約5像素?

謝謝。

+0

它看起來適合我。看看在導航欄右側放置一個按鈕的其他iPhone應用程序:消息,日曆,聯繫人,地圖等等,它們都以相同的方式間隔。 – 2010-09-11 19:32:40

+1

我的客戶希望它更遠,並且這個間距用信息按鈕看起來不太好。 – Emil 2010-09-11 19:50:08

+0

我在導航欄上使用相同的按鈕,但在左側而不是在右側,使用默認間距。我看起來很好。如果您的客戶想要更多地突出顯示,請問爲什麼他們希望自己的應用看起來與使用導航欄中的信息按鈕的所有其他應用完全不同。 – 2010-09-11 23:55:03

回答

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

嘗試設置infoButton.contentEdgeInsets(或imageEdgeInsets);像

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

我不知道它是否適用於「系統」按鈕,但它可能。

如果這不起作用,最簡單的方法可能是將其粘貼到UIView中。

編輯:推測工具欄調用[customView sizeThatFits:blah]來找出視圖「想成爲」有多大。上面的代碼應該是「添加一個10像素的右邊緣插圖」,這對於一個普通的(自定義)按鈕來說,也會使尺寸增大10個像素。

看起來像UIButton爲標準信息按鈕返回一個固定大小,忽略任何插入。您的代碼通過影響contentRectForBounds:和imageRectForContentRect:方法「工作」,它會更改繪製圖標的位置,但實際上並未改變按鈕的大小。我懷疑這個圖標是在按鈕外面繪製的,這可能意味着「可觸摸」矩形是錯誤的(但工具欄似乎增加了正常UIBarButtonItems的觸摸矩形,所以也許沒關係)。

+0

哈,工作!我不知道爲什麼,但它工作。謹慎向我解釋? – Emil 2010-09-12 09:22:52

+3

編輯:這段代碼並沒有做到這一切,我不得不補充:\t'infoButton.contentEdgeInsets =(UIEdgeInsets){。left = -10};',或者按鈕只會從右邊擠壓。 – Emil 2010-09-12 09:25:50