LoginSignup
1
1

More than 5 years have passed since last update.

【Swift】PagingMenuControllerの描画がズレる

Posted at

PagingMenuControllerの小ネタです。

PagingMenuControllerでaddSubViewされるviewの横幅がなぜか大きく表示されていたので、その解決方法です。
普通にテーブルビューを含むviewControllerをaddSubViewする分には全く問題がなかったのに、とある画面だけ表示がずれていたので、原因を探ってみました。

結論としては、addSubViewされる対象の画面がスクロールビューを持っていたのですが、このスクロールビューの生成が間に合っておらずwidthがxcodeのデフォルトの値のままで、その子ビューもスクロールビューのサイズに合わせて生成されていたためだと思います。(これが原因かどうかは断定できませんが…)
addSubViewされる画面は端末の横幅で生成されていたので、サイズの合わないビューに対して無理やりaddSubViewしていたので、以下のように修正したらうまく表示できました。

UIView.animate(
            withDuration: 0.0,
            delay: 0.0,
            animations: {
                self.scrollView.setNeedsLayout()
        }, completion: {(finished: Bool) in
            if finished {
                self.pagingView.addSubview(pagingMenuController.view)
                self.addChildViewController(pagingMenuController)
                pagingMenuController.didMove(toParentViewController: self)
            }
        })

今回のケースだと、pagingMenuControllerのビューをaddSubViewする対象のビューのスクロールビューの生成がうまくいっていなかったため、スクロールビューに対して更新をかけていますが、通常のビューでも生成がうまくいかなかった場合は対象のビューに更新をかけてやれば正しく表示されるかと思います。

pagingMenuControllerはaddSubViewする時に制約を自動で付与してくれているっぽいので(要確認)、逆にハマってしまいました。
手動でつけられたらこんなに悩まなかったのに…。

※ちなみに手動でautolayoutを切って制約をつけたら画面が表示されないバグにハマりました(xcode上では正しく表示されます)。

自分でもかなり凌ぎの実装だな〜と思いますが、他にやり方が思いつかなかったので、addSubViewやPagingMenuControllerに詳しい方がいらしたらご教授お願いいたします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1