2015-06-08 17 views
2

我試圖構建一個可重用的UIView,它的寬度應該等於它在Swift中的超級視圖。如何使用自動佈局在Swift中爲可重用的UIView設置約束?

由於其超視圖的大小不同,我認爲我必須爲它設置約束與自動佈局。

但我無法弄清楚如何在Swift中以編程方式執行它。

下面是可重複使用的子視圖代碼:

import UIKit 

class bottomMenu: UIView { 

@IBOutlet var bottomMenu: UIView! 


required init(coder aDecoder: NSCoder) { 
    super.init(coder:aDecoder) 
    NSBundle.mainBundle().loadNibNamed("bottomMenu", owner: self, options: nil) 

    bottomMenu.backgroundColor = UIColor.redColor() 

    //How to make the width of the bottom Menu equal to its superview? 

    self.addSubview(self.bottomMenu) 
    } 

} 

誰能告訴我怎麼做呢?

謝謝

+0

你有自定義用戶界面的xib嗎? – Miknash

+0

是的,我有一個xib。我已經將寬度設置爲320px。因此,當我在iPhone 5上運行它時它可以很好地工作。但是,當我將設備更改爲iPhone 6時,它無法匹配屏幕的寬度。這就是爲什麼我希望它可以與自動佈局一起工作。 –

回答

1

您可以在UIView子類override didMoveToSuperview()方法,並添加約束有:

override func didMoveToSuperview() { 
     super.didMoveToSuperview() 

     backgroundColor = UIColor.redColor() 

     let views = ["view" : self]; 
     self.setTranslatesAutoresizingMaskIntoConstraints(false) 

     self.superview?.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[view]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views)) 
     self.superview?.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[view]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views)) 
    } 
0

下面的代碼給出了加載視圖的高度和寬度相同的超級視圖。 (不知道你想要的高度)

bottomMenu.setTranslatesAutoresizingMaskIntoConstraints(false) 

//Views to add constraints to 
let views = Dictionary(dictionaryLiteral: ("bottomMenu",bottomMenu)) 

// Horizontal constraints 
let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|[bottomMenu]|", options: nil, metrics: nil, views: views) 
self.addConstraints(horizontalConstraints) 

// Vertical constraints 
let verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|[bottomMenu]|", options: nil, metrics: nil, views: views) 
self.addConstraints(verticalConstraints) 
+0

我從self.view.addConstraints(verticalConstraints)中刪除了'view',它起作用了!謝謝 –

+0

噢,對不起。我看到你從UIView子類調用而不是UIViewController。查看更新後的答案。 –

+0

Thx!對不起,我沒有贏得足夠的聲望,以upvote你的答案 –

相關問題