前些天项目中自定义了一个进度条,部分效果如下图。
图上面的每一个原点都是一个Button,数量由数据决定,即动态循环创建。当在界面更新数据的时候,进度条的长度也会随之发生改变,可能变为四个原点,也可能是五个,也可能是两个或者一个。
对iOS不太熟悉,于是bug出现了。当原点数量变多的时候不会出问题,但是如果变成两个或者一个的时候,最底层显示的是三个原点,即比正常多了一个。界面就会出现错乱。
花了好几个小时,定位到问题原因就出在当需要更新原点数量的时候,没有把这个UIView中的内容清空,即每次改变数量都会在这一层View上叠加一层。
所以才造成了上面说的bug。
最后决定在需要更新原点数量的时候将这个View从外层的View清除,创建好之后在添加回去,那么问题又来了。怎么移除?
通过查阅iOS原生的资料,转成c#就是:
ThisView.RemoveFromSuperview();
试了半天才明白,这句的意思是将ThisView从他的外层的UIview中移除。
下面贴一些关键代码:
//进度条
private UIView _progressView = null;
public UIView ProgressView {
get
{
if (_progressView == null) {
_progressView = new UIView();
}
return _progressView;
}
set {
_progressView = value;
}
}
当需要更新点数量时:
// 更新数据了,将以前的进度天从总view中移除,添加新的进度条,以免造成显示错乱
ProgressView.RemoveFromSuperview();
ProgressView = new UIView();
this.AddSubview(ProgressView);
最后在刷新一下界面的约束即可。