2016-11-25 59 views
1

我怎樣才能寫入以下代碼使用NSLayoutConstraints(或)在UIView子類自動佈局代替autoresizingMask

func commonInit() { 
    aView     = UIView() 
    aView.autoresizingMask = [.flexibleHeight, .flexibleWidth] 

    addSubview(aView) 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 

    let smallerSide = min(bounds.width, bounds.height) 

    aView.bounds = CGRect(x: 0.0, y: 0.0, width: smallerSide, height: smallerSide) 
    aView.center = CGPoint(x: bounds.midX, y: bounds.midY) 
} 

一個目的是避免使用layoutSubviews()。 此外,aView必須保持1:1的寬高比。 如果您需要更多信息,請告訴我。

PS:請讓我們用swift3,謝謝。

回答

-1

檢查下面的代碼:

let view = UIView(frame: CGRectZero) 
    view.setTranslatesAutoresizingMaskIntoConstraints(false) 
    super.init(frame: frame) 
    let viewsDict = ["view": view] 
    addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[view]-0-|", options: .allZeros, metrics: nil, views: viewsDict)) 
    addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[view]-0-|", options: .allZeros, metrics: nil, views: viewsDict)) 
    addSubview(view) 
+0

感謝您的答案,但它有一些問題:必須在添加約束之前將視圖添加爲子視圖。我的目標是不要用另一種觀點來填補子類 - 但要在中心有一個正方形,邊長比爲1:1。 –

+0

@這只是填充超級視圖。不是OP想要的。 – BangOperator

-1

我已經通過複製粒度等級相同的行爲,但只針對iPhone手機。檢查這個故事板。 (它不是代碼,你問什麼)

Storyboard

由於ipad公司有寬度:Regaular和高度:常規,現在看來,這是不可能的iPad,而無需使用layoutSubview

+0

感謝您的回答,它可以像您提到的那樣工作,也可以用於單個/少數控制器。不幸的是,我的目標是重複使用這個子類(作爲背景或其他) - 爲了能夠保持它們全部是最新的,它應該被分類。 –

+0

Downvoters,請解釋相同的原因! – BangOperator