2016-03-28 11 views
0

programlı hızlı bir UIToolBar ve Ürünleri yaratıyorum ile hazırlamak yok s':Benim UIButtonBarItem düzgün 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)) 

Ben spacer öğe eklemek yoksa, o zaman simülatör benziyor Bu: bu kodda öyle diyor gibi

enter image description here

Ben, onları var yoksa. Burada görebileceğiniz gibi

enter image description here

, şimdi sola doğru ekran dışına düşen görüntülerdir kalmaz, bunlar artık doğru sırayla konum: Ben bu olsun.

.FlexibleSpace, öğeler arasında dinamik boşluk eklemeyi düşündüm. Burada bir şey mi eksik? Birisi çeşitli yayınlarda, bir UIBarButtonItem içinde bir UILabel'e genişlik ayarlayabileceğini ve .FlexibleSpace'in bunu tanımlayabileceğini belirtti.

cevap

1

Sorun, otomatik düzen motorunu karşılamak için yeterli kısıtlamaya sahip değilsiniz. Araç çubuğunu dibe sabitlersiniz, ancak genişlik daralmaktadır, böylece yalnızca düğmeleri kullanır, ancak sizin görüşünüzün genişliğini olmasını istersiniz. Gibi bir şey deneyin:

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

Vay çok katı bir cevap için çok teşekkürler. Programatik olarak kısıtlamalar eklemek için pek çok yol. Bu sürümü henüz görmedim. "Active = true", "addConstraint" öğesine eşit olan activateConstraints öğesine eşdeğer olduğunu varsayar. Apple geliştiricilerinin neden bu kadar çok şey yarattığını merak ettim. Tekrar teşekkürler! – Trip