2017-11-29 23 views
0

xibファイルに基づいてカスタムUIViewを作成し、いくつかのUIVIewsに制約を追加しました。自動レイアウトでカスタムUIViewで計算されたフレームを取得する方法

私のView Controllerで私はUIViewを追加し、そのクラスを私のカスタムビューに設定しました。ここまでは順調ですね。私のカスタムビューが正しく表示されます。

しかし、今では@IBInspectable(numerOfButtons:Int)があり、この番号に基づいてUIButtonsをカスタムビューにプログラムで追加したいと考えています。 私のカスタムビューのサブビューにこのボタンを合わせたいと思っています。だから、プログラムでボタンフレームを設定しようとしています。しかし、私がlayoutSubviews()でこれを行うと、私のサブビューは私の自動レイアウト制約に基づいて計算されません。私は私のサブビューのsetNeedsLayout()とlayoutIfNeeded()を呼び出そうとしましたが、これはうまくいきません。

どのように私はlayoutSubviewsでそれらと連携する(私の制約の計算で)私のサブビューの正しいフレームを取得することができます()

それとも私が間違って何をすべきか?

ところで、私のアプローチはiPad Pro 9.7インチシミュレータで動作しようとすると動かないようです。プログラム的制約を設定するには

+0

代わりのフレームを計算することができ、制約を設定することは非常に簡単このlibraryとの代替ソリューションを持っていますスタックビューを使用する必要があります。このhttps://developer.apple.com/videos/play/wwdc2015/218/とhttps://developer.apple.com/videos/play/wwdc2015/219/ –

+0

を見ればこれは私の問題を解決しません問題はボタンがnumberOfButtonsに基づいて追加したい唯一のコントロールではないためです。私はまた、スクロールビューのcontentSizeを変更し、このスクロールビューにビューを追加したいと思います。そしてそこに私はスタックビューを使用することはできません。それは、計算されたフレームを取得する方法を見つけようとする理由です。 –

答えて

0

は時間がかかることになりますが、幸いにも、我々は自分自身に

let box = UIView() 
    self.view.addSubview(box) 
    box.snp.makeConstraints { (make) -> Void in 
     make.width.height.equalTo(50) 
     make.center.equalTo(self.view) 
    } 

希望これがお手伝いします