ビューコントローラに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
のいずれかをサブクラス化して、それに応じて間隔を設定できるようにすることを考えましたが、アイテム間の間隔を変更するためにオーバーライドできるメソッドを見つけることができなかったようです。 。
この問題を解決する方法についての洞察は大歓迎です!
@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
を右に移動することです。次に、すべてのUIBarButtonItems
をrightBarButtonItems
として特定の順序で追加して、目的の外観を取得します。
それは今うまくいきます!助けてくれてありがとう、フォグマイスター!
値が0.0またはnegativeの場合、アイテムは、画像とタイトルを合わせた幅に合わせて設定します。
幅を-20.0
に設定すると、それは無視され、標準の幅が使用されます。
とにかく負の幅で何を達成しようとしているのですか?より良い方法があると私はほぼ確信しています。