UITableViewでのProgressBarの実装について
Swift3でのUITableView時のプログレスバーの振る舞いについて質問します。
データ取得中の真っ白な(何も表示されていない)tableViewの時にプログレスバーで、データ取得の進捗率を表示させたいのですが、下記のコードですと、tableViewにデータが表示された後にプログレスバーが表示されてしまいます。どのように修正したら良いでしょうか。
また、プログレスバーが終了後(.progressが1.0になった時)、プログレスバーをviewから消したいのですが、self.table.reloadData()の下にprogressView.removeFromSuperView()を書くとプログレスバーがそもそも表示されません。終了処理の書き方についてもアドバイスください。
override func viewDidLoad() {
super.viewDidLoad()
/* 諸々の設定(省略) */
let navigationBarHeight = navigationController?.navigationBar.frame.size.height
let statusBarHeight = UIApplication.shared.statusBarFrame.height
progressView = UIProgressView(frame: CGRect(x: 0, y: navigationBarHeight! + statusBarHeight, width: self.view.frame.size.width, height: 5)) // プログレスバー
progressView.progressViewStyle = .default
progressView.progressTintColor = appleBlueColor
progressView.trackTintColor = .white
progressView.transform = CGAffineTransform(scaleX: 1.0, y: 2.0) // 長さと太さの設定
self.view.addSubview(progressView)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
fetchData()
self.table.reloadData()
}
func fetchData() {
let request = URLRequest(url: rankUrl!)
do {
html = try String(contentsOf: request.url!, encoding: .utf8)
}catch{
}
let jiDoc = Ji(htmlString: html)
let parsedList = jiDoc?.xPath("//body/div/div/div/ul[@class='list']")?.first
if parsedList != nil {
for li in (parsedList?.enumerated())! {
var item = [String]()
let title = li.element.lastChild?.children.first?.content
item.append(title!)
let url = li.element.lastChild?.children.first?.children.first?.attributes["href"]
item.append(url!)
let site = li.element.lastChild?.children.last?.content
item.append(site!)
let newsDate = date_to_string(cellDate: Date())
item.append(newsDate)
self.items.append(item)
progressView.setProgress(Float(self.items.count)/10, animated: true)
}
}
}