【问题标题】:iOS toolbar barbuttonitem spaceriOS工具栏barbuttonitem spacer
【发布时间】:2018-11-23 03:45:04
【问题描述】:

我正在尝试在 iOS 的工具栏上添加两个栏按钮 [取消] 和 [保存] 相应地在右侧和左侧。

我使用了第三个栏按钮 [Spacer] 并将其设置为 [.flexiblewidth] 否则,添加它时,只有左侧按钮出现 [Cancel] 和 [Spacer] & 和 [Save] 必须在下一个消失?

屏幕截图在链接中: https://ibb.co/cZsaVV

let pickerView = UIPickerView()

override func viewDidLoad() {


pickerView.addSubview(self.setToolBar())
}

func setToolBar() -> UIToolbar {
      let toolBar =  UIToolbar()
        toolBar.isTranslucent  = true
        toolBar.backgroundColor = UIColor.clear
        let barButtonAttr = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 15),
                             NSAttributedString.Key.foregroundColor : UIColor.black]
        // [Save] BarButtonItem
        let saveBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.save, target: self, action: nil)
        saveBarButtonItem.setTitleTextAttributes(barButtonAttr, for: .normal)
        // [Cancel] BarButtonItem
        let cancelBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.cancel, target: self, action: nil)
        cancelBarButtonItem.setTitleTextAttributes(barButtonAttr, for: .normal)

        let spacerBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace ,
                                                  target: self, action: nil)
        spacerBarButtonItem.setTitleTextAttributes(barButtonAttr, for: .normal)
        // add BarButtonItems to toolBar
        toolBar.items = [cancelBarButtonItem,spacerBarButtonItem,saveBarButtonItem]
        toolBar.sizeToFit()
return toolBar
}

【问题讨论】:

  • 欢迎来到 SO。请将屏幕截图添加到帖子本身。另外:会发生什么,您期望会发生什么?尝试向工具栏添加约束以提供屏幕宽度
  • 这里是链接中的屏幕截图:ibb.co/cZsaVV
  • 在帖子的末尾它说“在此处输入图像描述”。为此添加一个新行,以便图像在帖子中可见。
  • 尝试将两个条形按钮项添加到 UIToolBar 并设置为最右边和最左边。它们是在左侧并排添加的吗?
  • 尝试删除spacerBarButtonItem.setTitleTextAttributes(barButtonAttr, for: .normal)

标签: ios iphone swift uibarbuttonitem uitoolbar


【解决方案1】:
func createAccessoryViewWithTarget(_ target: AnyObject, width: CGFloat) -> UIView {

    // Previous button
    let previousButton = UIBarButtonItem(title: "Previous", style: .plain, target: target, action: #selector(self.moveToPreviousTextField))
    previousButton.tintColor = UIColor.white

    //Next button
    let nextButton = UIBarButtonItem(title: "Next", style: .plain, target: target, action: #selector(self.moveToNextTextField))
    nextButton.tintColor = UIColor.white

    // Dismiss/close/done button
    let doneButton = UIBarButtonItem(title: "Done", style: .done, target: target, action: #selector(self.keyboardDoneButtonTapped))
    doneButton.tintColor = UIColor.white

    let keyboardToolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: width, height: 44))
    keyboardToolbar.barStyle = .black

    let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)

    var itemsArray = [UIBarButtonItem]()
    itemsArray.append(previousButton)
    itemsArray.append(fixedSpace)
    itemsArray.append(nextButton)
    itemsArray.append(flexSpace)
    itemsArray.append(doneButton)
    keyboardToolbar.items = itemsArray
    keyboardToolbar.sizeToFit()

    return keyboardToolbar
}

我猜这是旧代码可能是 swift3。在这里,我在 next 和 done 按钮之前添加了 3 个按钮。灵活空间和固定空间用于按钮之间的空间。这里需要注意的重要一点是您添加 barbutton 项目的顺序。在您的情况下,使用灵活空间将 2 个按钮按左端按钮、灵活空间、右端按钮的顺序放置在右端和左端。

【讨论】:

    【解决方案2】:

    我终于找到了解决办法。

    我将 ToolBar 添加到 PickerView,然后调用 UIToolBar.SizeToFit(),这在所有情况下都是必须的。

    问题是我必须稍后更改选取器视图大小,在这种情况下,子视图工具栏的大小不适应选取器视图的新大小协调。所以解决方案只是在对父视图进行任何修改后再次调用 ToolBar.SizeToFit() 。这是代码的快照:

    // popupView 是自定义 UIPickerView

    popupView.frame = CGRect(x:0, y:0, width:100, height:100)

    // toolBar是自定义UIPickerView AddCurrencyPicker的UIToolBar的一个对象

    (popupView as!AddCurrencyPicker).toolBar.sizeToFit()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 2014-04-21
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多