Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView和UIRefreshControl由于未知原因被下移_Ios_Uitableview_Cocoa Touch_Uirefreshcontrol - Fatal编程技术网

Ios UITableView和UIRefreshControl由于未知原因被下移

Ios UITableView和UIRefreshControl由于未知原因被下移,ios,uitableview,cocoa-touch,uirefreshcontrol,Ios,Uitableview,Cocoa Touch,Uirefreshcontrol,我的应用程序中有一个UITableViewController,其中添加了UIRefreshControl。然而,有时(我不知道如何重现这种情况,时不时会发生),我会在表视图的顶部得到一些额外的空白,刷新控件的偏移量甚至低于此值 这就是它看起来的样子(左侧闲置,右侧向下拉): 我不知道是什么导致了这一切。在我的viewdidload中,我只是实例化refresh控件并调用设置属性标题的更新函数。我已经移动了将刷新控件添加到表视图的视图中,正如我在别处读到的那样。这就是代码的样子: overri

我的应用程序中有一个UITableViewController,其中添加了UIRefreshControl。然而,有时(我不知道如何重现这种情况,时不时会发生),我会在表视图的顶部得到一些额外的空白,刷新控件的偏移量甚至低于此值

这就是它看起来的样子(左侧闲置,右侧向下拉):

我不知道是什么导致了这一切。在我的viewdidload中,我只是实例化refresh控件并调用设置属性标题的更新函数。我已经移动了将刷新控件添加到表视图的视图中,正如我在别处读到的那样。这就是代码的样子:

override func viewDidLoad() {
    super.viewDidLoad()
    self.refreshControl = UIRefreshControl()

    updateData()
}

override func viewDidAppear(animated: Bool) {
    refreshControl!.addTarget(self, action: "updateData", forControlEvents: UIControlEvents.ValueChanged)
    tableView.insertSubview(self.refreshControl!, atIndex: 0)
}

func updateData() {
    //...
    ServerController.sendParkinglotDataRequest() {
        (sections, plotList, updateError) in
        //...

        // Reload the tableView on the main thread, otherwise it will only update once the user interacts with it
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            self.tableView.reloadData()

            // Update the displayed "Last update: " time in the UIRefreshControl
            let formatter = NSDateFormatter()
            formatter.dateFormat = "dd.MM. HH:mm"
            let updateString = NSLocalizedString("LAST_UPDATE", comment: "Last update:")
            let title = "\(updateString) \(formatter.stringFromDate(NSDate()))"
            let attributedTitle = NSAttributedString(string: title, attributes: nil)
            self.refreshControl!.attributedTitle = attributedTitle
        })
    }
}

是否需要将刷新控件添加为tableView的子视图?我想你所需要做的就是分配自我控制。根据文件:

此属性的默认值为零

将刷新控件指定给此属性会将该控件添加到 查看控制器的关联接口。您不需要设置 将刷新控件与视图关联之前刷新控件的框架 控制器。视图控制器更新控件的高度和宽度 正确定位

视图中添加子视图可能会执行多次。如果你从一个单元中按下一个控制器并弹出,它将再次被调用。可能是insertSubview检查刷新是否已经有父视图,并首先将其删除,因此这可能不是您的问题。您应该仅在控制器第一次出现时进行插入

updateData
也可能被多次添加

因此,我认为您只需要分配
self.refreshControl
,然后像现在使用
addTarget
一样为刷新操作添加一个处理程序,但这次是在self.refreshControl上执行


你也可以从故事板上完成这一切。在序列图像板中,选择UITableViewController,然后在属性检查器上将“刷新”属性设置为“已启用”。这会将UIRefreshControl添加到表中,您可以在视图层次结构上看到它。然后,您可以简单地按CTRL键从刷新控件正常拖动到.h文件中,并添加valueChange操作,当您下拉表中的刷新控件时,该操作将被触发。

好吧,我相信您描述的行为不一定是由刷新控件引起的。 根据表视图下面没有任何其他子视图的事实,我建议您尝试在表视图下面放置一个“假”视图。我通常喜欢边长为0的空标签

我也有类似的问题,比如我的表视图插图在某些情况下被破坏。我一使用这个“假”子视图,问题就消失了。我在其他一些帖子中也读到了这个问题。解决办法就是这样。这似乎是一种奇怪的行为/错误


试试看:)

是否尝试删除uirefreshcontrol并测试问题是否仍然存在?视图层次结构是什么样子的?视图控制器的视图中是否有其他子视图位于表视图下方?在表视图下方没有其他视图,只有导航栏、表视图和表视图单元格。除了刷新控件,它们都在情节提要中配置。我将删除刷新控件,看看问题是否仍然存在,但调试起来相当困难,因为这个问题很少发生。哦,等等,那行“tableView.insertSubview”。。。在我开始使用UITableViewController之前,我就有过这样的想法,读到UIRefreshControl不应该像在普通uitableview中那样使用。在这种情况下确实不需要,这可能是问题所在吗?我相信你可能是对的,我开始将刷新控件作为子视图添加到普通的UITableView中,直到后来才将我的视图控制器重构为UITableViewController。但我再也没想过那句话。这有点难测试,因为这个问题只是偶尔出现,但这似乎是合乎逻辑的。但是,我如何在故事板中添加处理程序呢?刷新控件实际上不存在于情节提要中。更新了答案以解释如何在情节提要中添加UIRefreshControl。它只需在属性检查器中启用刷新,并为您添加一个即可。然后可以使用CTRL键将操作添加到.h中。有了它,你就可以删除所有代码,只需实现动作。故事板是我的“解决方案”。很遗憾,我仍然找不到任何解释来解释为什么会发生这种情况。我正在对苹果的文档做这件事,但它给了这个讨厌的UI错误。在UITableViewController中,似乎真的不可能在表视图的正上方添加一些东西?这似乎是一个可行的方法,但我就是无法在其中添加标签:DYou是对的,我以为您使用的是UIViewController。当我读到你的问题时,我没有看到这一点。但要记住这一点,以防在“普通”视图控制器中有一个表视图。