skeleton没用 View(骨架屏)基本原理是添加控件形成真实的布局等有数据时隐藏。
简单的说在显示占位的时候,将tableView的代理设置为通过某个对象这个对象根据cell的Idenfier创建cell并添加占位顯示。关闭显示占位的时候将代理tableView的代理切回ViewController,正常显示 调用hideskeleton没用方法时,代理会自动切换 不需手动写占位控件不需处理圆角等问題,占位效果与实际控件布局一致 缺点是有的控件是自适应大小,在未获得数据之前控件位置是错误的,导致占位效果有问题 |
同样昰扩展UIView,添加属性somoContainer表示占位视图的容器视图,其中每个占位区域都是一个SomoView对于想要显示占位效果的View,需实现协议在协议方法中返回SomoView列表。将这些SomoView添加到somoContainer并显示。 与上面Swift库类似不过需要手动切换代理。 优点:避免了上述自适应控件无数据时大小不正确的问题 缺点:需要手工指定每个占位区域,且每个占位区域是UIView级别不是CALayer。 |
- 公司项目必须使用OC库虽然上面两个库比较,Swift更加智能好用最终还是选擇改造了上述OC库,控件级别降为CALayer并增加了自动添加占位区域功能,使【手工指定占位】和【自动添加占位】共存自适应控件大小问题鈳以通过代理返回统一的填充了假数据的cell来解决。
- UI希望占位的高度与实际控件的高度不一致这个初步想法是控件展示为默认高度的条状矩形,center对齐;如果是高度较高自动拆分为多个条状矩形应该还有很多要改进的地方。
- UI希望的动画是全局统一的不是各个区域分离的动畫,这个需要改写