draw(_ rect: CGRect) 不绘制超过一定尺寸
Posted
技术标签:
【中文标题】draw(_ rect: CGRect) 不绘制超过一定尺寸【英文标题】:draw(_ rect: CGRect) not drawing above certain size 【发布时间】:2019-06-14 13:00:28 【问题描述】:我在 UIScrollView
中有一个自定义的 UIView
子类,它(除其他外)覆盖
override var intrinsicContentSize: CGSize
get
...
和(最小的例子):
override func draw(_ rect: CGRect)
print(rect)
UIColor.white.set() // it has a dark background
UIBezierPath(rect: CGRect(x: 100, y: 100, width: 10, height: 10)).stroke()
对于“较小”尺寸的视图,绘图工作得很好,但超过一定的限制就不会再绘图了。
矩形渲染得很好
(0.0, 0.0, 79.5, 7458.5)
(0.0, 0.0, 228.5, 7458.5)
(0.0, 0.0, 149.0, 7738.0)
(0.0, 0.0, 429.0, 7738.0)
但是矩形失败
(0.0, 0.0, 89.5, 8381.0)
(0.0, 0.0, 257.0, 8381.0)
没有错误消息或警告。没有什么能让我知道失败的原因和原因。 UIScrollView
仍然可以滚动。它的内容只是空的。
这发生在模拟的第 5 代 iPad 和模拟的 iPad Pro 9.7" 中。
【问题讨论】:
【参考方案1】:问题在于draw
仅用作小视图的自定义绘图,而不是大画布。但是我认为这个故障点应该记录在某个地方。使画布更大会导致ignoring bogus layer size
警告。
要解决这个问题,应该考虑
不使用绘图 使用UITableView
或UICollectionView
一点一点地加载和卸载巨大的层。
【讨论】:
以上是关于draw(_ rect: CGRect) 不绘制超过一定尺寸的主要内容,如果未能解决你的问题,请参考以下文章
为啥不调用draw(_ layer: CALayer, in ctx: CGContext) 没有空draw(_ rect: CGRect)?
使用 override func draw(_ rect: CGRect) 时显示奇怪的边框
setNeedsDisplay() 没有调用 draw(_ rect: CGRect)
@IBDesignable UiView draw(_ rect: CGRect) 在 IB 中有效,但在设备上无效