求助:UIScrollView导致视图背景色异常变浅的解决方法
这个问题我之前也碰到过几次,UIScrollView的渲染机制确实有时候会和普通UIView不一样,尤其是背景色这块。结合你的描述(移除子视图没用,仅scroll view本身导致问题),给你几个靠谱的解决思路:
直接设置CALayer的背景色
UIKit对UIScrollView的背景色渲染有特殊处理,有时候直接设置backgroundColor会因为底层的contentView或渲染优化出现颜色偏差。试试绕过UIKit的设置,直接操作底层图层:// Swift scrollView.layer.backgroundColor = UIColor.yourTargetColor.cgColor// Objective-C scrollView.layer.backgroundColor = [UIColor yourTargetColor].CGColor;这种方式会让CALayer直接渲染背景,跳过UIScrollView的特殊处理,大概率能解决颜色偏浅的问题。
添加底层背景视图兜底
如果上面的方法没用,可以在UIScrollView内部添加一个全屏的背景视图,把它放在所有子视图的最底层。这样背景色由这个普通UIView渲染,完全不受UIScrollView的影响:// Swift let bgView = UIView(frame: scrollView.bounds) bgView.backgroundColor = yourTargetColor bgView.autoresizingMask = [.flexibleWidth, .flexibleHeight] // 适配scroll view尺寸变化 scrollView.insertSubview(bgView, at: 0)这个方法非常稳妥,我在多个项目里用过,完全能规避UIScrollView的背景渲染问题。
检查意外的Alpha值或系统设置
虽然你说确定是scroll view本身,但还是快速排查下这两个点:- 检查XIB/Storyboard或代码里有没有不小心把scroll view的
alpha设成了小于1.0的值; - 看看设备的「降低透明度」功能是否开启(设置>辅助功能>显示与文字大小>降低透明度),虽然这个是全局设置,但偶尔会对UIScrollView的背景渲染产生特殊影响。
- 检查XIB/Storyboard或代码里有没有不小心把scroll view的
禁用UIScrollView的背景绘制(极端情况)
如果以上都不行,可以试试关闭UIScrollView自身的背景绘制,然后靠外部视图提供背景:scrollView.drawsBackground = false然后给scroll view的父视图设置你想要的背景色,同时确保scroll view的
clipsToBounds设为false(如果父视图能完全覆盖的话)。
这些方法应该能解决你的问题,优先试试前两个,最有效也最常用。
内容的提问来源于stack exchange,提问作者Wizzardzz

