隐藏UIRefreshControl iOS的最佳方法是什么?

时间:2017-08-31 13:28:34

标签: ios swift uitableview uirefreshcontrol

一旦用户离开ViewController而refreshControl仍然可见,我就无法隐藏refreshControl。我试过设置它从superView(tableView)中删除它,用新的替换它等等...当用户返回到屏幕时,问题仍然存在于tableView,顶部内容插入保留在refreshControl之前,它留下了一个空白区域tableView的顶部,如果我不替换/隐藏refreshControl,它将在此时可见。

有什么建议吗?

图片:Transition between screens, refreshControl does not hide on viewDidDisappear

4 个答案:

答案 0 :(得分:1)

试试这个: -

exit()

答案 1 :(得分:0)

当您展示新屏幕时,只需使用.endRefreshing()上的refreshControl

答案 2 :(得分:0)

初始化刷新控件:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:syncfusion="http://schemas.syncfusion.com/wpf"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:MainWindowVM></local:MainWindowVM>
    </Window.DataContext>
    <Grid>

        <syncfusion:MenuAdv Width="300" Height="40" ItemsSource="{Binding League}" ExpandMode="ExpandOnMouseOver">
            <syncfusion:MenuAdv.ItemTemplate >
                <HierarchicalDataTemplate DataType="local:MenuList" ItemsSource="{Binding Teams}" >
                    <StackPanel Orientation="Vertical" VerticalAlignment="Top" >
                        <Label Content="{Binding Name}" Height="Auto" FontFamily="Arial" FontSize="12" VerticalAlignment="Top" Margin="0,3,0,0"  VerticalContentAlignment="Center"/>
                    </StackPanel>
                </HierarchicalDataTemplate>
            </syncfusion:MenuAdv.ItemTemplate>
        </syncfusion:MenuAdv>


    </Grid>
</Window>

处理刷新并结束刷新:

lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: 
                     #selector(ViewController.handleRefresh(_:)), 
                     for: UIControlEvents.valueChanged)
        refreshControl.tintColor = UIColor.red

        return refreshControl
    }()

添加刷新控件:

func handleRefresh(_ refreshControl: UIRefreshControl) {
        self.tableView.reloadData()
        refreshControl.endRefreshing()
    }

答案 3 :(得分:0)

我联系了一位朋友,给出了一个非常好的答案。这是帮助我顺利删除refreshControl的代码,以防它在屏幕上处于冻结状态:

func forceHideRefreshControl(tableView: UITableView) {
    if tableView.contentOffset.y < 0 { // Move tableView to top
        tableView.setContentOffset(CGPoint.zero, animated: true)
    }
}

虽然视图控制器尚未完成加载,但它不会显示refreshControl。为此你需要再次调用beginRefreshing(),但我会延迟这样做以避免任何动画问题。无论如何,我认为这是实际去除顶部白色间距的最佳解决方案。我不知道为什么endRefreshing()没有用,但至少我找到了另一种方法。希望这有助于任何人! :)

注意:但是,此解决方案仅在卡住/冻结的refreshControl上进行测试。我不知道如果你没有这个问题会有什么影响,但仍然使用这个解决方案来隐藏refreshControl。