昨天突然發(fā)現(xiàn)了一個問題,table view每次點完其中的一個item后再返回,或者下拉刷新后,第一個item上都會出現(xiàn)一塊兒空白。只有再次進入table view時才恢復正常。
google了好久,發(fā)現(xiàn)最常見的原因是設置:
self.automaticallyAdjustsScrollViewInsets = false // 取消自動內(nèi)邊距
但是我試過之后,發(fā)現(xiàn)這會導致tableview在一開始,第一行就被navigation bar遮蓋住,顯然不能解決遇到的問題。
然后發(fā)現(xiàn)有人說設置 edgesForExtendedLayout:
self.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0)
然而并沒有什么用。
而且,我發(fā)現(xiàn),這個問題只在iOS 9.x出現(xiàn),iOS 10.3上沒有問題,顯示正常。
我的table view很簡單,沒有什么多余的設置,只能一點點排查。我發(fā)現(xiàn)當我把UIRefreshController去掉后,就恢復正常,下拉和進入一個item再返回后都不會出現(xiàn)上部有空白的情況。而且仔細觀察,這個空白的高度,與UIRefreshController的高度幾乎相當,大于navigation bar的高度。因此,可以得出結論,我的這種出現(xiàn)空白的情況,與內(nèi)邊距無關,只是UIRefreshController導致的。
我對UIRefreshController的屬性設置有:
self.refreshController?.backgroundColor = UIColor.red
self.refreshController?.tintColor = UIColor.green
self.refreshController?.attributedTitle = NSAttributedString.init(string: "下拉刷新列表")
現(xiàn)象如圖所示:
點擊(刷新)前:
點擊(刷新)后:
刷新過程中:
我使用的是UITableViewController自帶的UIRefreshController,在storyboard中通過Enabled Refreshing 開啟刷新控件。唯一可疑的是設置attributedTitle的語句。刪掉后tableview恢復正常,下拉刷新或者點選item返回后都不會出現(xiàn)空白。
google上有人說需要進行如下設置:
self.spinner.backgroundColor = UIColor.red
self.spinner.tintColor = UIColor.green
self.spinner.attributedTitle = NSAttributedString.init(string: "刷新下載列表")
self.tableView.addSubview(self.spinner)
self.tableView.sendSubview(toBack: self.spinner)
試過了,沒有用,iOS 9.x上依然沒改善。
但是,又想在下拉時寫刷新提示語句,怎么做呢?正確的方式是在Storyboard的UITableViewController上enabled Refreshing,這時會自動在TableView Controller上創(chuàng)建一個RefreshControl(我這里已經(jīng)將這個UIRefreshController連接進code,變量名為spinner,所以圖中顯示的是變量名),選中此refresh controller,在右側(cè)Attribute Inspector上直接編輯想要顯示的提示文字,如圖所示:

修改后,在iOS 9.x上恢復正常,如圖:
刷新過程:
table view 點擊(刷新后):