我创建了一个简单的,自定义的UIView
子类LineView
,它会覆盖drawRect:
以从右上角到左下角绘制一条线。
这个LineView
作为子视图放置在UIScrollView
中,使用固定约束来确定其高度和宽度以及顶部+前导约束的位置。
当滚动UIScrollView
时,宽度约束将更新为更改线视图的大小:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
...
self.lineViewWidthConstraint.constant = someFactorRelatedToTheCurrentScrollPosition;
[self.lineView setNeedsLayout];
}
问题:更改宽度不会调用LineView
的drawRect:方法。因此,线不会被重新绘制,而只是被挤压或拉伸。即使手动使用setNeedsLayout
也不会触发重新绘制。
知道为什么没有调用draw方法以及如何解决这个问题?
尝试使用layoutIfNeeded
而不是setNeedsLayout
。前者是同步(强制)呼叫,后者是异步呼叫。