viewDidLayoutSubviews()内のオブジェクトのサイズと位置を変更しようとしています。メソッドfixPositions()が呼び出されますが、すべての変更は次の画面に移動した後にのみ適用されます。オブジェクトのサイズと位置をプログラムで変更する
override func viewDidLayoutSubviews() {
let width = filterMainView.frame.width/5
filterView.frame = CGRectMake(0.0, 0.0, width, 50.0)
fixPositions(filterSubview, image: filterImage, button: filterButton, width: width)
}
func fixPositions(mainView: UIView, image: UIImageView, button: UIButton, width: CGFloat) {
let buttonFrame = CGRectMake(0.0, 0.0, width, 50.0)
button.frame = buttonFrame
mainView.frame = buttonFrame
image.frame = CGRectMake((width - 30.0)/2, 10.0, 30.0, 30.0)
}
また、filterViewが正常に動作し、それはすぐに変更されます:
は、ここに私のコードです。この方法では何が問題になりますか?レイアウトが行われた後、このロジックはviewWillLayoutSubviews
viewdidLayoutSubviews
にする必要があります
あなたのコードを 'viewWillLayoutSubviews()'に入れてみてください。 – AnthonyR
@AnthonyRoaniしかし、もし私がそれらのアクションを5回達成すべきならどうしますか?それは多くの余分なコード行を追加します。 – Slava
なぜこれらのデリゲートメソッドを使用しているのかわかりません。あなたの要素フレームが変更された後に 'self.layoutIfNeeded()'を呼び出さないのはなぜですか?これによりフレームが更新されます。私はあなたのケースに 'layoutSubviews()'メソッドを使うべきではないと思う(UIButtonフレームはいつも変わっているようだ) – AnthonyR