UIScrollView子视图的Redraw / setNeedsLayout不起作用

问题描述 投票:0回答:1

我创建了一个简单的,自定义的UIView子类LineView,它会覆盖drawRect:以从右上角到左下角绘制一条线。

这个LineView作为子视图放置在UIScrollView中,使用固定约束来确定其高度和宽度以及顶部+前导约束的位置。

当滚动UIScrollView时,宽度约束将更新为更改线视图的大小:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    ...
    self.lineViewWidthConstraint.constant = someFactorRelatedToTheCurrentScrollPosition;
    [self.lineView setNeedsLayout];
}

问题:更改宽度不会调用LineView的drawRect:方法。因此,线不会被重新绘制,而只是被挤压或拉伸。即使手动使用setNeedsLayout也不会触发重新绘制。

知道为什么没有调用draw方法以及如何解决这个问题?

ios uiview uiscrollview
1个回答
0
投票

尝试使用layoutIfNeeded而不是setNeedsLayout。前者是同步(强制)呼叫,后者是异步呼叫。

© www.soinside.com 2019 - 2024. All rights reserved.