我的UIButtonBarItem没有使用FlexibleSpace

时间:2016-03-28 20:45:20

标签: ios iphone swift uitoolbar

我是以编程方式在swift中创建UIToolBar及其Items:

    var items = [UIBarButtonItem]()
    let leftButton  = UIBarButtonItem(image: UIImage(named: "left"), style: .Plain, target: self, action: Selector("doneClickedMaButton"))
    let spacer      = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
    let rightButton = UIBarButtonItem(image: UIImage(named: "right"), style: .Plain, target: self, action: Selector("doneClickedRight"))
    let searchButton = UIBarButtonItem(barButtonSystemItem: .Search, target: self, action: Selector("doneClickedSearch"))
    items.append(leftButton)
    items.append(spacer)
    items.append(searchButton)
    items.append(spacer)        
    items.append(rightButton)

var toolBar         = UIToolbar()
    toolBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 50)
    toolBar.translatesAutoresizingMaskIntoConstraints = false
    toolBar.backgroundColor = UIColor.redColor()
    toolBar.items = items
    toolBar.sizeToFit()
    view.addSubview(toolBar)
    view.addConstraint(NSLayoutConstraint(item: toolBar, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .Bottom, multiplier: 1.0, constant: 0.0))

如果我没有添加spacer项,那么模拟器看起来像这样:

enter image description here

如果我确实让他们进去,就像在这段代码中所说的那样。我明白了:

enter image description here

正如您在此处所看到的,不仅图像现在从屏幕向左下方移动,而且它们不再是正确的顺序。

我以为.FlexibleSpace只是增加了项目间的动态间距。我在这里错过了什么吗?有人在各个帖子中提到,可以在UIBarButtonItem中为UILabel设置宽度,这可以使.FlexibleSpace识别它。

1 个答案:

答案 0 :(得分:1)

问题是您没有足够的约束来满足自动布局引擎。您正在将工具栏固定到底部,但宽度正在缩小,因此它只能容纳按钮,但您希望它是视图的宽度。尝试类似:

Deferred