【发布时间】:2019-08-02 20:35:01
【问题描述】:
我创建了一个简单的自定义UIView 子类LineView,它覆盖drawRect: 以从右上角到左下角画一条线。
这个LineView 作为子视图放置在UIScrollView 中,对其高度和宽度使用固定约束,对其位置使用顶部+前导约束。
当UIScrollView 滚动时,宽度约束会更新为更改线视图的大小:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
...
self.lineViewWidthConstraint.constant = someFactorRelatedToTheCurrentScrollPosition;
[self.lineView setNeedsLayout];
}
问题:改变宽度不会调用LineView的drawRect:方法。因此,这条线不会被重新绘制,而只是被挤压或拉伸。即使手动使用setNeedsLayout 也不会触发重绘。
知道为什么不调用 draw 方法以及如何解决这个问题吗?
【问题讨论】:
-
将您的代码从“drawRect”方法移动到“layoutSubviews”方法
-
感谢@iDhaval,但我如何在 layoutSubviews 中执行绘图?
-
最终,绘制是在图层上完成的。因此,您可以使用 CAShapeLayer 和 UIBezierPath 绘制线条。关注这个:stackoverflow.com/questions/21311880/…
-
试试
setNeedsLayout,而不是setNeedsDisplay。 -
谢谢,添加 CALayer 并手动更新它可以正常工作并解决问题。
标签: ios uiview uiscrollview