2016-03-28 16 views
0

我以編程方式迅速建立一個UIToolBar及其項目:我UIButtonBarItem的不正確鋪陳與FlexibleSpace

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

問題是你沒有足夠的約束來滿足自動佈局引擎。您將工具欄固定在底部,但寬度縮小,因此只能容納按鈕,但您希望它是視圖的寬度。嘗試像這樣:

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) 
    toolBar.leadingAnchor.constraintEqualToAnchor(self.view.leadingAnchor).active = true 
    toolBar.trailingAnchor.constraintEqualToAnchor(self.view.trailingAnchor).active = true 
    toolBar.bottomAnchor.constraintEqualToAnchor(self.view.bottomAnchor).active = true 
+0

非常感謝這麼多的這樣一個堅實的答案。以編程方式添加約束的方法有很多種。我還沒有看過這個版本。我假設'active = true'等同於'activateConstraints',它等於'addConstraint'。我很好奇爲什麼蘋果開發人員爲了創造這麼多相同的東西而做了這麼大的努力。再次感謝! – Trip