我有一个'UIViewContrller',一个分段控件和'UIViewController'中的'UITableView'。 每个选项卡[段]将在表中显示不同,我的方法使用相同的表,当单击该段时,我将使用新数据重新填充表。 一切都很顺利但是当我点击第二个标签时,显示的单元格[填充了一些数据]但不是全部。当我向下滚动时,我会正确显示所有数据。
我不确定发布哪个代码可以帮助您解决问题,所以请问任何问题。
以下是一些代码段:
func segmentChange(){
//self.populateProgressTable(tableView, indexPath: NSIndexPath())
tableView.reloadData()
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//control segment is selected
if (segmentedControl.selectedSegmentIndex == 0){
return populateControlTable(tableView, indexPath: indexPath)
}else{
//progress segment is selected
return populateProgressTable(tableView, indexPath: indexPath)
}
}
func populateProgressTable(table: UITableView ,indexPath: NSIndexPath) -> UITableViewCell{
var cell:ProgressCell = tableView.dequeueReusableCellWithIdentifier("ProgressCell") as! ProgressCell
cell.initWithCourseName("science",courseProgress: 34, thirdLevelProgress: 94, fourthLevelProgress: 12, fifthLevelProgress: 99)
return cell
}
更新 这是截图,用阿拉伯语:):
因此,当表格首次显示百分比已正确更新但条形图未显示时,可能有助于提及我正在设置条形图,如您在此代码中所示:
func makeProgressAnimations(container: UIView , bar: UIView ,color: UIColor ,persentage: Double ,margin:Int ){
var x = Int(container.bounds.width) - margin
var y = margin
var width = ((Double(container.frame.width) - 4) * ( -(persentage/100)))
var hieght = (Int(container.frame.height) - (margin * 2))
UIView.animateWithDuration( 1 , animations: {
bar.frame = CGRectMake(CGFloat(x) , CGFloat(y),CGFloat(width),CGFloat(hieght))
})
}
答案 0 :(得分:0)
实际上可以看到您所看到的截图。
就个人而言,我注意到(并记录了)Xcode中的一个错误,其中的差距出现在UITableView的顶部。
..你可以在这个StackOverflow页面上找到它的解决方法:
我看到的另一个问题是,有时候,即使您为UITableView
设置了DataSource和Delegate,它仍然可能无法工作,直到您从UITableView
拖放到故事板中的父级。
此处描述:UITableView on storyboard
最后一件事,你没有尝试在后台线程上设置UITableView的数据,是吗?如果是这样,您需要将代码移动到UI线程上。
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
<强>更新强>
好的,我发现问题实际上是移动到此页面时动画显示不正确。
讽刺的是,我的一个应用程序做了类似的事情,当用户进入屏幕时开始动画。我开始做的是在viewDidLoad
被叫之后故意等待半秒钟,然后开始动画。我不记得为什么我添加了这个,但也许有帮助,让iOS有时间完成绘制屏幕,然后开始在其上制作动画。
我的Objective-C做了类似的事情......
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self doTheAnimationStuff];
});
也许你可以尝试一下,看看问题是否仍然存在?