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