2014-10-28 46 views
21

我有一個UINavigationItem在我的視圖控制器,我試圖減少我的兩個RightBarButtonItems之間的間距。下面是我的一些代碼:更改iOS之間的UIBarButtonItems之間的間距8

// Create two UIBarButtonItems 
    let item1:UIBarButtonItem = UIBarButtonItem(customView: view1) 
    let item2:UIBarButtonItem = UIBarButtonItem(customView: view2) 

    var fixedSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
    fixedSpace.width = -20.0 

    // Add the rightBarButtonItems on the navigation bar 
    viewController.navigationItem.rightBarButtonItems = [item2, fixedSpace, item1] 

可以看出,我使用的是FixedSpace UIBarButtonItem,但是這並沒有改變出於某種原因的間距。我曾考慮過子類化UINavigationItemUIBarButtonItem,以便我可以相應地設置間距,但我似乎無法找到任何方法來改變項目之間的間距。

任何有關如何解決這個問題的見解將不勝感激!

回答

18

感謝@ Fogmeister的幫助,我發現view1view2對象的寬度太大,它們是UIButtons。這就是爲什麼它們之間存在不正常的間距。這是我的最終代碼:

// Get the first button's image 
    var view1Img:UIImage = UIImage(named: "Image1")! 

    // Create the first button 
    var view1:UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: view1Img.size.width, height: view1Img.size.height)) 

    // Get the second button's image 
    var view2Img:UIImage = UIImage(named: "Image2")! 

    // Create the second button 
    var view2:UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: view2Img.size.width, height: view2Img.size.height)) 

    // Create two UIBarButtonItems 
    let item1:UIBarButtonItem = UIBarButtonItem(customView: view1) 
    let item2:UIBarButtonItem = UIBarButtonItem(customView: view2) 

    // Set 26px of fixed space between the two UIBarButtonItems 
    var fixedSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
    fixedSpace.width = 26.0 

    // Set -7px of fixed space before the two UIBarButtonItems so that they are aligned to the edge 
    var negativeSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
    negativeSpace.width = -7.0 

    // Add the rightBarButtonItems on the navigation bar 
    viewController.navigationItem.rightBarButtonItems = [negativeSpace, item2, fixedSpace, item1] 

我創建背景圖像的第一UIButton,然後用它的大小來創建用於UIButton框架。我對第二個UIButton執行相同的操作。然後,我從兩個UIButtons創建UIBarButtonItems。之後,我創建了26px的固定空間,然後創建了-7.0px的固定空間。前者的目的是在兩個按鈕之間創建一定的空間。後者的目的是將所有UIBarButtonItems移到右側。然後,我將所有UIBarButtonItems作爲rightBarButtonItems以特定的順序添加,以便獲得我想要的外觀。

現在效果很好!感謝所有的幫助,Fogmeister!

5

docs for UIBarButtonItem...

enter image description here

如果該值爲0.0或,項目設置的合成圖像和標題的寬度以適應。

如果將寬度設置爲-20.0它將忽略它並使用標準寬度。

無論如何,你試圖實現負寬度?我幾乎肯定會有更好的方法。

+0

感謝您的迴應,Fogmeister!我已經看過其他關於這個問題的SO問題,推薦的解決方案是在兩個UIBarButtonItems之間添加負的固定間距以縮小它們之間的差距。我的目標是減少項目1和項目2之間的填充,但沒有任何我在網上找到的幫助。 – Alexander 2014-10-28 17:37:40

+0

如果您根本不添加固定寬度的空間,會發生什麼情況?只需添加button1和button2即可。 – Fogmeister 2014-10-28 17:39:57

+0

如果我根本不添加固定寬度的空間,則兩個項目之間的空間太大。 – Alexander 2014-10-28 17:41:24

11

另一種方法是通過更改IB中的左圖像和右圖像插圖。

enter image description here

+1

它已在其他地方報道在stackoverflow,這將視覺移動圖像,但不移動可觸及區域以對應於視覺變化。我自己沒有證實這個缺陷;推薦測試以確保在按鈕圖像上的任何位置點擊仍然有效,特別是如果使用大偏移量。 – ToolmakerSteve 2017-03-18 02:20:28

+0

爲什麼正確的是-23? – 2017-09-15 08:48:01