Swift
PagingMenuController

【Swift】PagingMenuControllerの描画がズレる

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に詳しい方がいらしたらご教授お願いいたします。