进场时,我UINavigationBar在应用程序中的标题出现了一个奇怪的问题interactivePopGestureRecognizer.我制作了一个演示应用来展示这个bug.
UINavigationController.FirstViewController 隐藏了导航栏,并且 interactivePopGestureRecognizer.enabled = NO;Second并且ThirdViewController可以看到导航栏并启用了popgesture.使用popgesture从第二个视图返回到第一个视图时会发生错误.如果您中途拉出第二个视图然后返回第二个视图,导航标题将显示"第二个视图"(如预期的那样).但是当您转到第三个视图时,标题将不会更改为"第三个视图".然后单击第三个视图的后退按钮,导航栏将变得混乱.
请查看我的演示应用程序.任何帮助解释为什么会发生这个错误将不胜感激.谢谢!
在我的应用中,我有不同的控制器.当我将controller1推到导航控制器并向后滑动时,一切正常.但是,如果我推动导航控制器1,并进入controller1推控制器2并尝试向后滑动,我得到一个冻结的应用程序.如果通过后退按钮返回一切正常.
我怎么能抓住这个问题?
在iOS 7.我有导航控制器,我在堆栈顶部推送一个新的VC.
新的VC有一个UIScrollView,它填充VC的根视图并垂直滚动.如果我向下滚动一点点,然后尝试使用"刷卡回去" /"刷卡流行"的姿态,垂直滚动查看第一滚动到顶部,然后interactivePopGesture承认,我可以拖上顶VC向左和向右堆叠.
为什么会这样?我希望防止我的滚动视图在识别"滑动返回"手势之前自动滚动到顶部.我该怎么做呢?
更新#1:
当我创建一个新的xcode项目时,我似乎无法重现这个错误,所以在原始项目中我肯定是错误的.当我找到原因时会更新.
更新#2:
当识别interactivePopGesture时,setContentOffset在我的垂直滚动视图上调用方法.在调试时,我看到setContentOffset是从中调用的UIScrollViewInternal _adjustContentOffsetIfNecessary.
更新#3:
在以下场景中会出现同样的问题:我在垂直UIScrollView中有UITextFields.按下某个UITextField时,会出现一个键盘.当我想以交互方式关闭键盘时(通过在键盘上滚动滚动视图),在我释放拖动后,会出现故障.UIScrollView的内容偏移暂时设置为零,然后设置回原始内容偏移并继续动画.这个不需要的设置contentOffset也被调用UIScrollViewInternal _adjustContentOffsetIfNecessary.
我继续使用我自己的UIScrollView子类在两个场景中替换了UIScrollView.在该子类中,我将私有方法重写-(void) _adjustContentOffsetIfNecessary为空void方法.我的两个问题都被消除了,我找不到任何负面后果.这不是一个解决方案,我不会使用这种方法,因为我不知道我到底做了什么.
我正在添加这样的搜索控制器:
viewController.navigationItem.searchController = searchController
viewController.navigationItem.hidesSearchBarWhenScrolling = false
viewController.definesPresentationContext = true
searchController.dimsBackgroundDuringPresentation = false
searchBarContainer.translatesAutoresizingMaskIntoConstraints = false
searchBarContainer.heightAnchor.constraint(equalToConstant: 0).isActive = true
Run Code Online (Sandbox Code Playgroud)
当尝试向右滑动以弹出当前viewController(此处激活交互式pop手势)但停留在同一个控制器上时,搜索栏就会消失.
viewController.navigationItem.searchController
Run Code Online (Sandbox Code Playgroud)
保持添加搜索控制器,但它不可见.
我有这个ViewController#1,它是导航控制器的根视图控制器并具有
self.navigationController.navigationBarHidden = YES;
Run Code Online (Sandbox Code Playgroud)
ViewController#1告诉它的导航控制器推送ViewController#2,它有
self.navigationController.navigationBarHidden = NO;
Run Code Online (Sandbox Code Playgroud)
当我想通过从屏幕左侧滑动从ViewController#2返回到ViewController#1时,我看到我的视图作为我附加的屏幕截图.当我向右移动手指时捕捉到这一点,因此当我向右滑动时,右上方的黑色区域变得越来越小,直到ViewController#1覆盖了所有屏幕区域.
我猜这是由两个视图控制器之间的隐藏/可见导航栏差异引起的.
我想知道是否有可能摆脱这个黑色区域.
