在iOS中解除视图控制器时,ContentInset设置错误

在iOS中解除视图控制器时,ContentInset设置错误,第1张

概述在我的iOS应用程序(使用Xamarin开发)中,我使用自定义容器视图控制器在与UISegmentedControl的段相关联的不同子视图控制器(都包含UITableView)之间切换. 在开始时,我遇到了切换到新视图控制器时分配的错误contentInset的问题,因为视图位于导航栏下方.我用其他stackoverflow question中提供的解决方案解决了这个问题,它就像魅力一样. 现在的 在我的iOS应用程序(使用Xamarin开发)中,我使用自定义容器视图控制器在与UISegmentedControl的段相关联的不同子视图控制器(都包含UItableVIEw)之间切换.

在开始时,我遇到了切换到新视图控制器时分配的错误contentInset的问题,因为视图位于导航栏下方.我用其他stackoverflow question中提供的解决方案解决了这个问题,它就像魅力一样.

现在的问题是其中一个子视图控制器以模态方式呈现另一个视图控制器,当它被解除时,contentInset再次设置错误.在这种情况下,tablevIEw从可用空间的中间开始,导航栏和第一行之间有相当多的空白区域.

我试图了解哪个方法隐式更改内容插入,但我没有运气.那么,什么方法可能是这种行为的罪魁祸首?

我试过将automaticAdjustsScrollVIEwInsets设置为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.

总结

以上是内存溢出为你收集整理的在iOS中解除视图控制器时,ContentInset设置错误全部内容,希望文章能够帮你解决在iOS中解除视图控制器时,ContentInset设置错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1099877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存