2015-06-19 93 views
1

我們已經在我們的應用程序是「底欄」這在目前只是一個UIView及以上導致不一致等場所中定義的所有...UIBarButtonItems與背景圖像

我試圖取代將此與UIToolBarUIBarButtonItems結合使用,以便我可以使用UIAppearance協議定製外觀。

我們在工具欄中使用的按鈕具有由可調整大小的圖像(在資產目錄中定義)製成的背景圖像。

我們希望它是什麼樣子是這樣的......

Desired result

按鈕被很好地爲中心的工具欄的頂部和底部之間。

然而,當我使用UIAppearance協議設置背景圖片會發生什麼情況是這樣的......

Actual result

的按鈕垂直對齊偏離中心。

看起來文本是在同一個地方,背景是應用在文本週圍,但文本實際上低於中心。沒有BG這是有道理的,但有一個BG它不起作用。

我可以更改每個按鈕的代碼框架,但這不是理想的,因爲我們回到了我試圖解決的不一致問題。

是否有任何方法可以在一個地方對UIBarButtonItem的所有實例進行更改?

我甚至嘗試在圖像底部添加透明度以「向上推」,但沒有效果。

更新到位

顯示問題在ENW項目,我嵌入導航controlle蘭特使用此代碼視圖控制器...

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self.navigationController setToolbarHidden:NO animated:animated]; 
} 

- (NSArray *)toolbarItems 
{ 
    return @[ 
      [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithTitle:@"Hello" style:UIBarButtonItemStyleDone target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithTitle:@"World!" style:UIBarButtonItemStyleDone target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithTitle:@"Goodbye!" style:UIBarButtonItemStyleDone target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] 
      ]; 
} 

結果是...

Default toolbar style

然後我用UIAppearance代碼...

[[UIToolbar appearance] setTintColor:[UIColor whiteColor]]; 
[[UIToolbar appearance] setBarTintColor:[UIColor colorWithRed:0.15 green:0.2 blue:0.85 alpha:1.0]]; 

,結果是...

Blue toolbar with white tint colour.

這看上去很好,但是當我添加背景圖片...

Resizable button image

隨着代碼...

[[UIBarButtonItem appearance] setBackgroundImage:[UIImage imageNamed:@"ToolBarButtonBackgroundEnabled"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

我看到硫小號...

Button backgrounds are below centre

我試圖改變標題位置調整...

[[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, -5) forBarMetrics:UIBarMetricsDefault]; 

但是,這只是移動按鈕中的文本......

Buttons with offset titles

一點也沒有」 t移動按鈕背景。

我找不到與工具欄外觀中按鈕偏移有關的任何內容。

移動文本

我錯了關於保留在同一個地方的文本。文本當您添加一個背景,欄按鈕項移動...

Merged image of with and without background

我合併工具欄的截圖有和無按鈕的背景。您可以看到文字向下移動。

回答

0

您是否試過[xyzbtn setImageEdgeInsets:UIEdgeInsetsMake(10, 10, 10, 10)]; 或者您的圖片尺寸大於您的按鈕尺寸,因此可能會影響佈局。

+0

我試過這個使用UIAppearance協議,它崩潰了應用程序。 – Fogmeister

0

我注意到了同樣的事情:如果你設置一個背景圖像,UIBarButtonItem向下移動3pt。它也向右移動1pt。

這似乎沒有發生在iOS 11中,這是個好消息。

我的猜測是,蘋果假設如果你有一個背景圖像集,你試圖表明一個'選定'按鈕狀態,並且他們有意地將按鈕向下移動,然後向右移動以提供一個3-D運動外觀。