rickytan / RTRootNavigationController

Implicitly make every view controller has its own navigation bar
MIT License
2.15k stars 379 forks source link

使用手势侧滑途中取消侧滑 导致到顶部距离改变 #126

Closed DesLin closed 7 years ago

DesLin commented 7 years ago

页面 automaticallyAdjustsScrollViewInsets=NO 且导航栏初始alpha=0 滚动时改变alpha 到alpha=1 使用手势侧滑 划到一半 又划回去 此时tableView到顶部的距离被改变 image image

rickytan commented 7 years ago

nav-alpha

类似这种 UI 有很多,貌似没有问题啊。能提供一个复现问题的 demo 吗?

DesLin commented 7 years ago

我把代码抽出来一个demo 测试了一下 还是有这个问题 只要alpha仍低于1.0 侧滑返回不会 alpha=1.0 侧滑返回就会出现 Demo已附上 您可以看看 RTRootNavTest.zip

DesLin commented 7 years ago

补充一下: alpha=1.0的时候 设置NaviBackgroundImage=nil 这个时候进行侧滑返回也不会出现异常

rickytan commented 7 years ago

您这种情况下应该用 self.automaticallyAdjustsScrollViewInsets = YES; 的,因为刚进去页面时导航条是透明的,让它自动加 top inset

rickytan commented 7 years ago

或者这样吧,更符合您的要求:

    self.automaticallyAdjustsScrollViewInsets = NO;
    self.extendedLayoutIncludesOpaqueBars = YES;
DesLin commented 7 years ago

我使用tableview作为例子 是为了简单抽出代码 实际场景和您之前发的gif一样是商品详情页 所以还是得使用self.automaticallyAdjustsScrollViewInsets = NO;这个特性

加了 self.extendedLayoutIncludesOpaqueBars = YES; 就不会有这个问题了 多谢您的指点! 的确是因为alpha=1.0的时候 导航栏变为不透明导致系统自动加了top inset导致的 另外,我测试了RTROOT和系统导航栏2种场景 在RTROOT中,alpha=1.0的时候 导航栏是不透明的 所以会出现问题 而系统导航栏 alpha=1.0的时候 导航栏仍然是半透的 此时就不会出现问题 对于设置导航栏的alpha的相关处理 RTROOT是否有什么不同的操作 导致2者的不同表现?

rickytan commented 7 years ago

系统是同一个导航条,你需要在 viewWillAppear 中设置导航条的属性,再试试?我猜应该一样的

DesLin commented 7 years ago

您是指给系统导航栏设置translucent=NO?

rickytan commented 7 years ago

改 inset 的问题本项目并不会特殊处理,其实还是系统行为,唯一不同的是每个 vc 的导航条是单独的,改动不会影响别人