RollingNotice icon indicating copy to clipboard operation
RollingNotice copied to clipboard

开始不显示,显示空白,过一段时间才会显示cell...

Open wjd-jax opened this issue 5 years ago • 14 comments

不知道为什么,我用storyboard写的view,在initwithcode中加载这个view,但是视图一开始的时候cell没有,过大约1-2秒才会开始显示cell

wjd-jax avatar Jan 07 '19 08:01 wjd-jax

能不能建个空工程,重现一下这个现象。 压缩放到网盘里,给我个链接

maltsugar avatar Jan 07 '19 09:01 maltsugar

或者你直接 用storyboard拖这个滚动视图, 不用在代码里加载 试试

maltsugar avatar Jan 07 '19 09:01 maltsugar

很迷...我新建了个工程用试了下并没有复现.不知道是不是用masonry设置约束导致的还是什么原因

wjd-jax avatar Jan 07 '19 09:01 wjd-jax

我现在改到了viewcontroller中设置代理相关解决了之前的问题

wjd-jax avatar Jan 07 '19 09:01 wjd-jax

我用空工程,发现在initWithCoder里写 如果直接刷新的话,因为没有view,还是只能在viewDidLoad里加到视图上,就会因为已经滚动一次 导致空白。 在viewDidLoad里reloadDataAndStartRoll时, 用masonry确实也会卡顿一下,用frame没影响

image

maltsugar avatar Jan 07 '19 10:01 maltsugar

为什么会在 initWithCoder写代码呢 这里获取不到view

maltsugar avatar Jan 07 '19 10:01 maltsugar

这个问题是因为用masonry,调用这个方法时layoutCurrentCellAndWillShowCell中,frame是0,0,0,0,所以currentCell的size是0,不显示。但是为什么定时器启动后再次调用layoutCurrentCellAndWillShowCell这个方法,frame就有了,任何位置并未设置frame,考虑是masonry或者初始化方法中,系统给了frame,目前还在找这个问题。

liuzhipeng93 avatar Feb 26 '19 05:02 liuzhipeng93

很迷...我新建了个工程用试了下并没有复现.不知道是不是用masonry设置约束导致的还是什么原因

在GYRollingNoticeView中的layoutCurrentCellAndWillShowCell方法中,把你预设的size大小数值直接赋给w和h。

liuzhipeng93 avatar Feb 26 '19 05:02 liuzhipeng93

目前考虑问题是由于masonry布局采用的autolayout也就是系统的frame,而masonry转化到frame需要时间,所以第一时间frame是0的,也就导致_currentCell的frame=0,所以显示不出来。

liuzhipeng93 avatar Feb 26 '19 06:02 liuzhipeng93

在viewDidLoad里写代码不好吗? 我开发好几年,从来没有重写过initWithCode,不知道在这写,是有什么高深的技巧还是什么高深的需求?

maltsugar avatar Feb 26 '19 06:02 maltsugar

在viewDidLoad里写代码不好吗? 我开发好几年,从来没有重写过initWithCode,不知道在这写,是有什么高深的技巧还是什么高深的需求?

那是你用纯代码写项目的原因,用sb写 ,初始化不会走initwithframe 和init 方法,只能用initWithCode,而且这是趋势,用sb写项目提高的效率不止一倍两倍

wjd-jax avatar Feb 26 '19 06:02 wjd-jax

好吧 sb倒没用过。我也不喜欢纯代码。我主用xib的

maltsugar avatar Feb 26 '19 06:02 maltsugar

好吧 sb倒没用过。我也不喜欢纯代码。我主用xib的

嗯,不在viewDidLoad 是考虑到封装,全都在viewcontroller里边会导致vc很臃肿,这种view层的东西,还是单独封装到一个view文件里比较清晰

wjd-jax avatar Feb 26 '19 06:02 wjd-jax

好吧 sb倒没用过。我也不喜欢纯代码。我主用xib的

嗯,不在viewDidLoad 是考虑到封装,全都在viewcontroller里边会导致vc很臃肿,这种view层的东西,还是单独封装到一个view文件里比较清晰

封装也不影响啊,viewDidLoad加载封装的组件就行。反正个人偏好吧,你爱这么写的话 自己研究下有没有好的解决方案

maltsugar avatar Feb 26 '19 06:02 maltsugar