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