web-dev-qa-db-ja.com

iOS 8でのUIBarButtonItem間の間隔の変更

ビューコントローラUINavigationItemがあり、2つのRightBarButtonItemsの間隔を狭くしようとしています。これが私のコードの一部です:

// 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を使用していますが、これは何らかの理由で間隔を変更していません。 UINavigationItemまたはUIBarButtonItemのいずれかをサブクラス化して、それに応じて間隔を設定できるようにすることを考えましたが、アイテム間の間隔を変更するためにオーバーライドできるメソッドを見つけることができなかったようです。 。

この問題を解決する方法についての洞察は大歓迎です!

25
Alexander

@Fogmeisterのおかげで、UIButtonsであるview1オブジェクトとview2オブジェクトの幅が大きすぎることがわかりました。それがそれらの間に異常な間隔があった理由でした。これが私の最終的なコードです:

// 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のフレームを作成します。 2番目のUIButtonに対して同じアクションを実行します。次に、2つのUIBarButtonItemsからUIButtonsを作成します。その後、26pxの固定スペースを作成し、次に-7.0pxの固定スペースを作成します。前者の目的は、2つのボタンの間に一定量のスペースを作成することです。後者の目的は、すべてのUIBarButtonItemsを右に移動することです。次に、すべてのUIBarButtonItemsrightBarButtonItemsとして特定の順序で追加して、目的の外観を取得します。

それは今うまくいきます!助けてくれてありがとう、フォグマイスター!

23
Alexander

もう1つの方法は、IBで左右のイメージインセットを変更することです。

enter image description here

11
zzzel

IBarButtonItemのドキュメント... から

enter image description here

値が0.0またはnegativeの場合、アイテムは、画像とタイトルを合わせた幅に合わせて設定します。

幅を-20.0に設定すると、それは無視され、標準の幅が使用されます。

とにかく負の幅で何を達成しようとしているのですか?より良い方法があると私はほぼ確信しています。

6
Fogmeister