【发布时间】:2016-10-24 02:54:16
【问题描述】:
我正在制作一个照片浏览应用程序,用户可以从网络上查看正在查看的照片的详细信息和 cmets。为此,我有一个带有分段控件的 UIViewController (parentVC),用作细节和 cmets 之间的切换,以及两个提供细节和 cmets 的 UITableViewController。 Storyboard of the view controllers in question.
为了在视图之间切换,tableVCs 从 storyboard 实例化并作为 childViewController 添加到 parentVCs,并且它们的视图作为子视图添加。
由于segmentedControl 被放置在navigatorController 的navBar 中,我希望tableViews 也能与parentVC 的navBar 配合使用。其中当第一个 tableview (detailVC) 被实例化时,它的 contentInset 会自动调整。
但是,当从分段控件切换后实例化第二个 tableview (cmetsVC) 时,它的 contentInset 未设置(实际上所有边都为 0),并且 tableview 隐藏在导航栏后面。但是当设备旋转时,tableview 会调整其 insets 并再次正常工作。
现在我怀疑这个问题与 iOS 如何自动调整滚动视图插入有关,因为切换首先出现的 childVC 总是会设置第一个出现的 VC 的 contentInset。我不知道在添加第二个 VC 时是否可以触发任何方法来设置第二个 VC 的 contentInset。
所以问题是,我如何将两个 childVC 的 contentInset 设置为尊重 parentVC 中的导航栏?创建 UIEdgeInset 是一种解决方法,但它不会在设备方向更改时自行更新。一个更小的问题是,当 childVC 以编程方式实例化时,我应该如何处理导航控制器的布局和插图,以便它们像在故事板本身中链接一样工作。
以下是我从 parentVC 实例化 childVC 时的代码。
if index == 0 { //details
if detailsVC == nil {
detailsVC = storyboard?.instantiateViewControllerWithIdentifier("InfoPaneDetailsVC") as! InfoPaneDetailsVC
}
if commentsVC != nil {
commentsVC.view.removeFromSuperview()
commentsVC.removeFromParentViewController()
}
addChildViewController(detailsVC)
detailsVC.didMoveToParentViewController(self)
view.addSubview(detailsVC.view)
view.layoutSubviews()
} else if index == 1 { //comments
if commentsVC == nil {
commentsVC = storyboard?.instantiateViewControllerWithIdentifier("InfoPaneCommentsVC") as! InfoPaneCommentsVC
}
if detailsVC != nil {
detailsVC.view.removeFromSuperview()
detailsVC.removeFromParentViewController()
}
addChildViewController(commentsVC)
commentsVC.didMoveToParentViewController(self)
view.addSubview(commentsVC.view)
view.layoutSubviews()
}
【问题讨论】:
标签: swift uitableview layout uinavigationbar ios9