Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Swift iOS11上的编程beginRefreshing()与LarGetTitles模式存在问题_Swift_Uinavigationcontroller_Ios11_Uirefreshcontrol_Large Title - Fatal编程技术网

Swift iOS11上的编程beginRefreshing()与LarGetTitles模式存在问题

Swift iOS11上的编程beginRefreshing()与LarGetTitles模式存在问题,swift,uinavigationcontroller,ios11,uirefreshcontrol,large-title,Swift,Uinavigationcontroller,Ios11,Uirefreshcontrol,Large Title,我们在UIKit中发现了一个bug,但想在这里发布,看看是否有其他人有这个问题或找到了解决方案 我们正在尝试使用新的iOS11大标题和提升的搜索栏/刷新控件。我们似乎发现了一个问题,导航堆栈的根viewController显示了一个小的显示问题(问题a),但一旦将另一个viewController推到导航堆栈上,显示就会出现问题(问题B): 注意事项: 堆栈中第二个VC的问题比第一个VC更严重 refreshControl不是绿色,代码将其设置为您在每个屏幕上第一次看到它时的颜色 当您拉刷新时

我们在UIKit中发现了一个bug,但想在这里发布,看看是否有其他人有这个问题或找到了解决方案

我们正在尝试使用新的iOS11大标题和提升的搜索栏/刷新控件。我们似乎发现了一个问题,导航堆栈的根viewController显示了一个小的显示问题(问题a),但一旦将另一个viewController推到导航堆栈上,显示就会出现问题(问题B):

注意事项:

  • 堆栈中第二个VC的问题比第一个VC更严重
  • refreshControl不是绿色,代码将其设置为您在每个屏幕上第一次看到它时的颜色
  • 当您拉刷新时,refreshControl向下滑动,它不应该这样做
  • 只有当我们以编程方式在viewDidLoad中执行“拉入刷新”时,这种奇怪的行为似乎才是一个问题,这样用户才能在进入屏幕时看到数据正在加载。如果删除调用
    refreshControl?.beginRefreshing()
    的行,则显示是干净的。我在一个示例香草应用程序中重新创建了这个问题。这是显示问题的整个viewcontroller:

    import UIKit
    
    class ViewController: UITableViewController {
        var tableHeaderSearchController: UISearchController!
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
    
            self.navigationController?.navigationBar.prefersLargeTitles = true
            self.navigationController?.navigationItem.largeTitleDisplayMode = .always
    
            tableHeaderSearchController = UISearchController(searchResultsController: UITableViewController())
            navigationItem.searchController = tableHeaderSearchController
    
            refreshControl?.tintColor = UIColor.green
            refreshControl?.backgroundColor = UIColor.clear
            refreshControl?.attributedTitle = NSAttributedString(string: "Loading Stuff...", attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 17)])
            refreshControl?.addTarget(self, action: #selector(refreshPulled), for: .valueChanged)
    
            // Commenting out these 2 lines makes it work fine but you can't see the initial refresh spinner
            refreshControl?.beginRefreshing()
            refreshPulled()
        }
    
        @objc func refreshPulled() {
            DispatchQueue.main.asyncAfter(deadline: .now() + 3) { [refreshControl] in
                refreshControl?.endRefreshing()
            }
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    
    这是故事板。它只是一个包装在navigationController中的普通tableviewcontroller。3个静态单元格,第二个单元格遍历到同一控制器类型的另一个实例


    任何想法都将不胜感激。我们真的很想采用新的外观,但这一点让我们很难做到。

    首先,表视图在导航栏下方向上延伸是绝对重要的,这就是iOS 11偏移行为是否正确:

        self.edgesForExtendedLayout = .all
        self.tableView.contentInsetAdjustmentBehavior = .always
    
    第二,手动刷新时滚动显示刷新控件由您决定,计算数量一点也不简单:

        self.refreshControl!.sizeToFit()
        let top = self.tableView.adjustedContentInset.top
        let y = self.refreshControl!.frame.maxY + top
        self.tableView.setContentOffset(CGPoint(0, -y), animated:true)
        self.refreshControl!.beginRefreshing()
    

    刷新期间,酒吧仍然太大,但我不知道该怎么办。基本上,Apple已经实现了大标题,并在导航栏中显示了刷新控件,而没有考虑其效果或处理产生的错误。

    我知道这没有什么帮助,但UIRefreshControl在我的项目中也存在很大的问题。有时大标题会“卡住”,比它应该的低40点,就像刷新控件仍在占用空间一样。你的情况可能是独一无二的,但我见过其他问题,如和。@CraigOtis是的,我见过其他一些问题。我制作的这个示例没有不透明条(所有默认值,例如半透明条),但它的性能很差。不过,很高兴听到人们有其他问题。听起来好像刷新控件的“提升”还没有完全完成。但是,好的建议是,将这些应用到我创建的示例项目中并不能修复示例中的行为。特别是刷新完成后第二个VC上的混乱