Ios [Swift4]控制指示灯出现在不同的位置

Ios [Swift4]控制指示灯出现在不同的位置,ios,swift,Ios,Swift,我正在尝试使用Xcode 10.1(10B61)和Swift4制作一个iOS应用程序 我对UIRefreshControl指示器的外观有疑问,如下图所示 UIRefreshControl脚本写在每个TableViewController类中(关于refresh func的代码相同) 任何人都可以给我一些建议 谢谢。试试这个-- 让我们知道。。工作正常吗?试试这个-- 让我们知道。。工作正常吗?TableviewController 1 class TableViewController1:

我正在尝试使用Xcode 10.1(10B61)和Swift4制作一个iOS应用程序

我对UIRefreshControl指示器的外观有疑问,如下图所示

UIRefreshControl脚本写在每个TableViewController类中(关于refresh func的代码相同)


任何人都可以给我一些建议

谢谢。

试试这个--

让我们知道。。工作正常吗?

试试这个--

让我们知道。。工作正常吗?

TableviewController 1

class TableViewController1: UITableViewController  {

    var refreshControl = UIRefreshControl()

    override func viewDidLoad() {
    super.viewDidLoad()


    refreshControl?.addTarget(self, action: #selector(onRefresh), for: .valueChanged)
    tableView1.addSubview(refreshControl)    // Added Line

}
TableviewController 2

class TableViewController2: UITableViewController  {

    var refreshControl = UIRefreshControl()

    override func viewDidLoad() {
    super.viewDidLoad()


    refreshControl?.addTarget(self, action: #selector(onRefresh), for: .valueChanged)

    tableView2.addSubview(refreshControl)    // Added Line

}
TableviewController 1

class TableViewController1: UITableViewController  {

    var refreshControl = UIRefreshControl()

    override func viewDidLoad() {
    super.viewDidLoad()


    refreshControl?.addTarget(self, action: #selector(onRefresh), for: .valueChanged)
    tableView1.addSubview(refreshControl)    // Added Line

}
TableviewController 2

class TableViewController2: UITableViewController  {

    var refreshControl = UIRefreshControl()

    override func viewDidLoad() {
    super.viewDidLoad()


    refreshControl?.addTarget(self, action: #selector(onRefresh), for: .valueChanged)

    tableView2.addSubview(refreshControl)    // Added Line

}

这是由于各种因素的综合作用

  • 您正在为导航控制器使用大标题。这使得
    TableViewController
    (实际上是任何可滚动的视图)将其
    refreshControl
    放在导航栏上。这种行为是在iOS 11中引入的

  • 您正在使用两个可滚动视图,其中一个绑定到导航栏,另一个未绑定。在调试期间,我发现层次结构中的第一个可滚动视图将其
    refreshControl
    附加到导航栏

  • 因此,这意味着我们可以通过在层次结构底部的某个位置放置一些虚假或虚拟的可滚动视图来修复它,以便它首先将其
    刷新控件
    绑定到导航栏。从iOS 11开始,任何可滚动视图都可能具有
    refreshControl
    及其“绑定”,即使您没有明确声明它

    在您的情况下,您可以这样在容器之前添加
    UIScrollView

    
    -看法
    --安全区
    --UIScrollView(虚拟)
    --集装箱视图
    ----表1
    ----表2
    ...
    

    发生这种情况是因为各种因素的组合

  • 您正在为导航控制器使用大标题。这使得
    TableViewController
    (实际上是任何可滚动的视图)将其
    refreshControl
    放在导航栏上。这种行为是在iOS 11中引入的

  • 您正在使用两个可滚动视图,其中一个绑定到导航栏,另一个未绑定。在调试期间,我发现层次结构中的第一个可滚动视图将其
    refreshControl
    附加到导航栏

  • 因此,这意味着我们可以通过在层次结构底部的某个位置放置一些虚假或虚拟的可滚动视图来修复它,以便它首先将其
    刷新控件
    绑定到导航栏。从iOS 11开始,任何可滚动视图都可能具有
    refreshControl
    及其“绑定”,即使您没有明确声明它

    在您的情况下,您可以这样在容器之前添加
    UIScrollView

    
    -看法
    --安全区
    --UIScrollView(虚拟)
    --集装箱视图
    ----表1
    ----表2
    ...
    

    我猜您没有设置
    UIRefreshControl
    的帧或偏移量,我猜您没有设置
    UIRefreshControl
    的帧或偏移量,但这次发生了新的分配。。因此,我对tableView中添加的视图表示怀疑。但这次发生了新的分配。。因此,我对tableView中添加的视图表示怀疑。。
    class TableViewController2: UITableViewController  {
    
        var refreshControl = UIRefreshControl()
    
        override func viewDidLoad() {
        super.viewDidLoad()
    
    
        refreshControl?.addTarget(self, action: #selector(onRefresh), for: .valueChanged)
    
        tableView2.addSubview(refreshControl)    // Added Line
    
    }