draw(_ rect: CGRect) 未绘制超过一定尺寸
draw(_ rect: CGRect) not drawing above certain size
我在 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()
}
绘图适用于“较小”尺寸的视图,但超过一定限制后就不再绘制了。
它可以很好地渲染 rects
(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".
问题是 draw
仅作为小视图的自定义绘图,而不是大 canvases。但是我认为这个失败点应该记录在某处。使 canvas 更大将导致 ignoring bogus layer size
警告。
要解决这个问题,可以考虑
- 不使用绘图
- 使用
UITableView
或UICollectionView
一点一点地加载和卸载巨大的图层。
我在 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()
}
绘图适用于“较小”尺寸的视图,但超过一定限制后就不再绘制了。
它可以很好地渲染 rects
(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".
问题是 draw
仅作为小视图的自定义绘图,而不是大 canvases。但是我认为这个失败点应该记录在某处。使 canvas 更大将导致 ignoring bogus layer size
警告。
要解决这个问题,可以考虑
- 不使用绘图
- 使用
UITableView
或UICollectionView
一点一点地加载和卸载巨大的图层。