ContentInset在iOS中关闭视图控制器时设置错误
在我的iOS应用程序(使用Xamarin开发)中,我使用自定义容器视图控制器在与UISegmentedControl
的段相关联的不同子视图控制器(全都包含UITableView
)之间切换。
在开始时,当切换到新的视图控制器时分配了错误的contentInset
,因为视图位于导航栏下方。 我用这个其他的计算器问题中提出的解决方案解决了问题,它的工作方式就像魅力一样。
现在的问题是,其中一个子视图控制器以模态方式呈现另一个视图控制器,并且当它被解散时, contentInset
被设置为错误。 在这种情况下,tableview从可用空间的中间开始,导航栏和第一行之间有相当大的空白。
我试图了解哪种方法隐含地改变了内容插入,但我没有运气。 那么,什么方法可能是这种行为的罪魁祸首?
我试着将AdjustsScrollViewInsets automaticallyAdjustsScrollViewInsets
设置为true和false,但结果是一样的。
更新:似乎这个问题仅在iOS 8中提供,但不在iOS 7中
Synposis
摆脱contentInset
。 在分段控制视图控制器和每个表视图控制器之间插入一个UINavigationController
。
它如何看故事板
虽然您不需要使用Storyboard来实现此解决方案,但它会形成非常图形化的用户界面。
连接分段控制
再次,我使用Storyboard来简化和清晰。 欢迎您以编程方式创建每个导航控制器和视图控制器,如果它适合您。
这是整个班级。 共30行代码。
class SegmentedControlViewController: UIViewController {
var segmentViewController:UIViewController? = nil
override func viewDidLoad() {
super.viewDidLoad()
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("nav0") as? UIViewController
self.addChildViewController(vc!)
self.view.addSubview(vc!.view)
self.segmentViewController = vc
}
@IBAction func segmentedControlValueChanged(sender: AnyObject) {
if let segmentedControl = sender as? UISegmentedControl {
let identifier = "nav(segmentedControl.selectedSegmentIndex)"
let vc = self.storyboard!.instantiateViewControllerWithIdentifier(identifier) as? UIViewController
self.addChildViewController(vc!)
self.transitionFromViewController(self.segmentViewController!, toViewController: vc!, duration: 0, options: .TransitionNone, animations: { () -> Void in
self.segmentViewController!.view.removeFromSuperview()
//vc!.view.frame = self.view.bounds
self.view.addSubview(vc!.view)
}, completion: { (Bool) -> Void in
vc!.didMoveToParentViewController(self)
self.segmentViewController!.removeFromParentViewController()
self.segmentViewController = vc
})
}
}
}
兼容性
上面的代码没有显示如何使用Segue Present Modally
或`Show(例如Push)推送视图控制器,因为它超出了这个响应的范围,并且两者都已经过验证。
在iPhone 4s至6 Plus上构建和测试,每个iPad,纵向,横向,方向都会改变,iOS 7和8。
链接地址: http://www.djcxy.com/p/87107.html上一篇: ContentInset set wrong when dismissing view controller in iOS