【问题标题】:Change Spacing Between UIBarButtonItems in iOS 8在 iOS 8 中更改 UIBarButtonItem 之间的间距
【发布时间】:2014-12-24 05:24:34
【问题描述】:

我的视图控制器上有一个UINavigationItem,我正在尝试减少我的两个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,但由于某种原因,这并没有改变间距。我曾考虑将UINavigationItemUIBarButtonItem 子类化,以便我可以相应地设置间距,但我似乎找不到任何可以重写的方法来更改项目之间的间距。

任何有关如何解决此问题的见解将不胜感激!

【问题讨论】:

    标签: ios swift ios8 uinavigationitem spacing


    【解决方案1】:

    感谢@Fogmeister 的帮助,我发现view1view2 对象(UIButtons)的宽度太大了。这就是为什么他们之间有异常的间距。这是我的最终代码:

        // Get the first button's image
        let view1Img = UIImage(named: "Image1")!
        
        // Create the first button
        let view1 = UIButton(frame: CGRect(x: 0, y: 0, width: view1Img.size.width, height: view1Img.size.height))
        
        // Get the second button's image
        let view2Img = UIImage(named: "Image2")!
        
        // Create the second button
        let view2 = UIButton(frame: CGRect(x: 0, y: 0, width: view2Img.size.width, height: view2Img.size.height))
        
        // Create two UIBarButtonItems
        let item1 = UIBarButtonItem(customView: view1)
        let item2 = UIBarButtonItem(customView: view2)
        
        // Set 26px of fixed space between the two UIBarButtonItems
        let fixedSpace = UIBarButtonItem(barButtonSystemItem: .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
        let negativeSpace = UIBarButtonItem(barButtonSystemItem: .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!

    【讨论】:

      【解决方案2】:

      另一种方法是更改​​ IB 中的左右图像插图。

      【讨论】:

      • 在 stackoverflow 的其他地方已经报道过,这会在视觉上移动图像,但不会移动可点击区域以对应视觉变化。我自己没有验证这个缺陷;建议进行测试以确保点击按钮图像上的任何位置仍然有效,尤其是在使用较大偏移量的情况下。
      【解决方案3】:

      来自docs for UIBarButtonItem...

      如果值为 0.0 或 ,则该项目将组合图像和标题的宽度设置为适合。

      如果您将宽度设置为-20.0,它将忽略它并使用标准宽度。

      你想用负宽度实现什么?我几乎可以肯定会有更好的方法。

      【讨论】:

      • 感谢您的回复,雾迈斯特!我已经查看了有关此的其他 SO 问题,推荐的解决方案是在两个 UIBarButtonItems 之间添加负固定间距以缩小它们之间的差距。我的目标是减少 item1 和 item2 之间的填充,但我在网上找到的没有任何帮助。
      • 如果根本不添加固定宽度的空间会怎样?只需添加没有空格的 button1 和 button2。
      • 如果我根本不添加固定宽度的空间,这两个项目之间的空间太大了。
      • @Alexander 如果您更改自定义视图怎么办?使 view1 和 view2 更小。它们到底是什么?
      • 感谢您提出所有这些问题。 view1 和 view2 是带有设置背景图像的 UIButton。我并没有开始制作这个应用程序,但是在你的帮助下,我意识到我忽略了一些东西。我发现这两个图像的框架宽度都太大了,导致它们之间有额外的间距。我已经将框架缩小到图像的大小,并且间距现在好多了!现在我所要做的就是将 UIBarButtonItems 向右移动一点,但我在这样做时遇到了麻烦。
      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多