galleryVIEwController:是PageVIEwController的容器
PageVIEwController:是pageVIEwController,我将它作为子视图添加到galleryVIEwController.
PageContentVIEwController:我把它放在UIImageVIEw中作为页面视图控制器的内容.
一切进展顺利,但是当我在图像之间滑动时,会发生奇怪的事情.白色缺口出现上行空间.
奇怪的是,当我完成滚动时,它会自动伸展.
这是galleryVIEwController的代码,它是PageVIEwController的容器:
import UIKitclass PageVIEwController: UIVIEwController,UIPageVIEwControllerDataSource,UIPageVIEwControllerDelegate {var startIndex:Int = 0var pageVIEwController : UIPageVIEwController!overrIDe func vIEwDIDLoad() { self.navigationController?.hIDesbarsOnTap = true; reset()}func reset() { /* Getting the page VIEw controller */ pageVIEwController = self.storyboard?.instantiateVIEwControllerWithIDentifIEr("PageVIEwController") as UIPageVIEwController self.pageVIEwController.dataSource = self let pageContentVIEwController = self.vIEwControllerAtIndex(0) self.pageVIEwController.setVIEwControllers([pageContentVIEwController!],direction: UIPageVIEwControllerNavigationDirection.Forward,animated: true,completion: nil) self.pageVIEwController.vIEw.frame = CGRectMake(0,self.vIEw.frame.wIDth,self.vIEw.frame.height) self.addChildVIEwController(pageVIEwController) self.vIEw.addSubvIEw(pageVIEwController.vIEw) self.pageVIEwController.dIDMovetoParentVIEwController(self) println("\(startIndex) start index")}overrIDe func dIDReceiveMemoryWarning() { super.dIDReceiveMemoryWarning() // dispose of any resources that can be recreated.}func pageVIEwController(pageVIEwController: UIPageVIEwController,vIEwControllerAfterVIEwController vIEwController: UIVIEwController) -> UIVIEwController? { var index = (vIEwController as PageContentVIEwController).pageIndex! index++ if(index >= Constants.Statics.images.count){ return nil } return self.vIEwControllerAtIndex(index)}func pageVIEwController(pageVIEwController: UIPageVIEwController,vIEwControllerBeforeVIEwController vIEwController: UIVIEwController) -> UIVIEwController? { var index = (vIEwController as PageContentVIEwController).pageIndex! if(index <= 0){ return nil } index-- return self.vIEwControllerAtIndex(index)}func vIEwControllerAtIndex(index : Int) -> UIVIEwController? { if((Constants.Statics.images.count == 0) || (index >= Constants.Statics.images.count)) { return nil } let pageContentVIEwController = self.storyboard?.instantiateVIEwControllerWithIDentifIEr("PageContentVIEwController") as PageContentVIEwController pageContentVIEwController.pageIndex = index return pageContentVIEwController}}
我该怎么做才能防止拉伸和滑动时的白色间隙?
更新:
发生了一件奇怪的事情,我将pageVIEwController Transition Style更改为Page Curl,问题没有出现.听起来像滚动!
解决方法 错误的起源是UIImageVIEw的约束.当您开始滚动时,仅调用vIEwWillAppear,并且尚未计算autolayout,滚动完成后显示视图,视图开始计算autolayout,并且在autolayout完成后发生vIEwDIDAppear.
您可以通过在PageContentVIEwController中添加以下代码来检查
overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() imageVIEw.image = UIImage(named: "UpcomingGamesBg") println("vIEwDIDLoad imageVIEw Frame : \(imageVIEw.frame) pageIndex : \(pageIndex)") } overrIDe func vIEwWillAppear(animated: Bool) { super.vIEwWillAppear(animated) println("vIEwWillAppear imageVIEw Frame : \(imageVIEw.frame) pageIndex : \(pageIndex)") } overrIDe func vIEwDIDAppear(animated: Bool) { super.vIEwDIDAppear(animated) println("vIEwDIDAppear imageVIEw Frame : \(imageVIEw.frame) pageIndex : \(pageIndex)") }
因为,imageVIEw的布局参考顶部布局指南,并且顶部布局指南在计算自动布局之前和之后可以有不同的值,你有这个BUG.
因此,要解决这个问题,您可以更改图像视图的约束并使它们成为父视图的亲戚(因为pageContentVIEwController就像一个子视图,而pagerVIEwController将管理顶部和底部边距),如下所示:
有了这个你可以修复这个BUG,但要小心你应该为pageVIEwController.vIEw添加一些约束
更新
例如,要支持navigationbar / Tabbar,您应该在vIEwDIDLoad中添加一些约束(在vIEw.addSubvIEw(pageVIEwController.vIEw)之后):
pageVIEwController.vIEw.setTranslatesautoresizingMaskIntoConstraints(false) let topConstraint = NSLayoutConstraint(item: pageVIEwController.vIEw,attribute: NSLayoutAttribute.top,relatedBy: NSLayoutRelation.Equal,toItem: topLayoutGuIDe,attribute: NSLayoutAttribute.Bottom,multiplIEr: 1.0,constant: 0) let bottomConstaint = NSLayoutConstraint(item: pageVIEwController.vIEw,toItem: bottomLayoutGuIDe,constant: 0) let leadingConstraint = NSLayoutConstraint(item: pageVIEwController.vIEw,attribute: NSLayoutAttribute.Leading,toItem: vIEw,constant: 0) let trailingConstraint = NSLayoutConstraint(item: pageVIEwController.vIEw,attribute: NSLayoutAttribute.Trailing,constant: 0) vIEw.addConstraints([topConstraint,bottomConstaint,leadingConstraint,trailingConstraint])
最好的祝福,
总结以上是内存溢出为你收集整理的ios – 防止刷UIPageViewController时出现的白色间隙全部内容,希望文章能够帮你解决ios – 防止刷UIPageViewController时出现的白色间隙所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)