UIViewControllerにUIViewが追加されました。これらのビューのフレームにアクセスして使用するために、ビューが完全にロードされていることを確認します。私はUIView内で働いているし、ViewControllerはテスト目的のためだけです。 UIViewControllerUIViewが完全にロードされたときの通知方法
var slideView: BSlideBar = BSlideBar(frame: CGRect(x: 0, y: 150, width: 320, height: 54))
self.view.addSubview(slideView)
で
:
私は次のようにビューを初期化していますのUIViewControllerにカスタムUIViewのをロードしています:ここで
は、私が働いている例でありますUIViewで
私はXIBファイルを私のUIViewに関連付けられているので、カスタムinit関数でNibをロードしています。
このUIView内には他のUIViewがあり、すべてUIViewControllerに追加されています。私はこれらのビューの属性にアクセスしようとすると、これは、すべて正常に動作し、問題が来ている:
例:
draggableView.layer.cornerRadius = draggableView.frame.width/2
これはdraggableView円になりますし、またのサイズをベースに私を可能にそれを円として維持しながら、それが含まれているビュー上でdraggableViewを実行します。これは、私のビューが初期化されたどのフレームでも一貫性を保つことを意味します。注意深く、フレームは、ロードされたUIViewのフレームではなく、常にXIBファイルのフレームとして返されます。
例2(それは予想して所望のフレームを返し、それをロードした後、私はボタンをクリックした場合):もう一度
self.centreLine.frame = CGRect(x: Int(sidePadding), y: Int(slideView.frame.height/2), width: Int(UIScreen.main.bounds.width - 2 * sidePadding), height: 2)
を、私は、このビューは、それが含まれているビューの大きさに合わせて調整したいですこの場合、エッジのパッディング内に留まり、まさにビューの真ん中にあるはずです。もう一度これは当てはまりません。
私が使用してthis答えを使用しようとしました:
-(void)awakeFromNib
override func layoutSubviews() {
super.layoutSubviews()
}
は、しかし、これらのいずれも後半に十分に呼ばれているように見えます。
問題は、私は通常、このような何かを呼ばれると同じようにUIViewの内側にあることに一因である:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
}
私は少し混乱したが、この問題が発生している理由を見つけることに本当に興味を持っています。私が持っている主な問題は、問題を簡潔に調べて、現在のすべてのリードを使い果たしたことです。
https://stackoverflow.com/questions/4501974/uiview-how-to-get-notified-when-the-view-is-loaded –
私はすでにこの質問を私の質問にリンクしています。それは、どの機能が適切なものか誤解しているかもしれません。任意の追加の説明は素晴らしいだろう –