UITableView现在填充数据直到滚动

时间:2015-06-23 13:16:41

标签: ios objective-c swift uitableview animation

我有一个'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
}

更新 这是截图,用阿拉伯语:):

enter image description here

因此,当表格首次显示百分比已正确更新但条形图未显示时,可能有助于提及我正在设置条形图,如您在此代码中所示:

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))
    })
}

1 个答案:

答案 0 :(得分:0)

实际上可以看到您所看到的截图。

就个人而言,我注意到(并记录了)Xcode中的一个错误,其中的差距出现在UITableView的顶部。

enter image description here

..你可以在这个StackOverflow页面上找到它的解决方法:

Gap at top of UITableView

我看到的另一个问题是,有时候,即使您为UITableView设置了DataSource和Delegate,它仍然可能无法工作,直到您从UITableView拖放到故事板中的父级。

enter image description here

此处描述: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];
});

也许你可以尝试一下,看看问题是否仍然存在?