Tencent / QMUI_iOS

QMUI iOS——致力于提高项目 UI 开发效率的解决方案
http://qmuiteam.com/ios
Other
7.11k stars 1.39k forks source link

QMUINavigationBarScrollingAnimator支持设置初始状态 #1117

Closed DevWhan closed 4 years ago

DevWhan commented 4 years ago

QMUINavigationBarScrollingAnimator的滑动效果计算依赖UIScrollView可以保证其一定是对的 但是在一些跨平台框架下UIScrollView的获取需要等到相应的渲染结束(并不是viewDidLoad) 所以会出现先正常显示导航栏, 过一会在隐藏导航栏(需求为offY为0时 是个通栏效果) 这个时间是依赖跨平台框架渲染时长, 不可控. 而且在大部分情况下, 一个通栏页面 第一屏是个通栏(不显示导航栏) 所以希望能提供一个api, 可以手动控制初始状态, 感谢.

MoLice commented 4 years ago

这个组件不需要什么初始值的概念,在滚动被触发之前 navigationBar 是怎样就是怎样,所以你自行在你想要的时机去设置你的 navigationBar 样式即可,例如 viewWillAppear:。至于设置的方式,用系统的 API,或者用 QMUINavigationControllerAppearanceDelegate 提供的接口,都可以。 image

DevWhan commented 4 years ago
- (UIImage *)navigationBarBackgroundImage {
    if(导航栏渐变模式){
       if(self.scrollAnimator){
           return self.scrollAnimator.backgroundImageBlock(self.scrollAnimator, self.scrollAnimator.progress);
       }

       return 透明图片
    }
    return 导航栏默认图片
}

这样确实可以由业务方解决, 只是需要一个时机去选择由scrollAnimator接手. 不过从组件自身角度来说确实, 初始这个概念有点偏. 感谢, 已解决.

MoLice commented 4 years ago

在组件层面是没有能力解决你说的这种场景的。UINavigationBar 的设置时机有限制(一般是 viewWillAppear:),但你的 scrollAnimator 的初始化时机是不确定的,它关联的 view 的初始化时机也是不确定的,所以如果要提供初始值的能力,就必须要求业务要保证 scrollAnimator/view 在指定的时机之前已经被初始化并设置好,这会带来更多问题,组件就不灵活了。

DevWhan commented 4 years ago

是的 在有两个需要被赋值的初始属性下 又去出api控制一种依赖一个初始属性的值 确实这种设计会带来很多问题 而且也不是合理的 我之前想偏了 光关注业务怎么实现好了 感谢