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

下一篇: Meteor: async update subscription