2017-06-22 102 views
1

我聲明瞭一個名爲var progressBar的UIView變量:UIView?removeFromSuperview()並不總是奏效

,我表現出來或隱藏此功能

func showProgressBar(showBar: Bool){ 
if showBar{ 
      let viewHeight = view.frame.size.height 
      progressBar = Bundle.main.loadNibNamed("progressBar", owner: nil, options: nil)?.first as? UIView 
      progressBar?.frame = CGRect(x: 0, y: viewHeight - 80 , width: self.view.frame.width, height: 80) 
      if let bar = progressBar{ 
       self.view.addSubview(bar) 
      } 
     }else{ 
      DispatchQueue.main.async() { 
       self.progressBar?.removeFromSuperview() 
      } 
     } 

有時認爲,當我瀏覽我無法隱藏進度條,即使在執行self.progressBar?.removeFromSuperview()視圖之間一點。在我看來,如果視圖失去了對舊的進度條的引用......您是否對這個問題有了解,以及如何修復它?

+0

嘗試直接在else cond中刪除progressBar。我認爲沒有必要在DispathQueue.main.async() –

+0

中刪除它我添加了DispatchQueue.main.async()以查看它是否可以解決問題。沒有它,問題依然存在。 –

+0

隱藏progressBar不起作用? –

回答

1

如果您只想顯示和隱藏您的progressBar爲什麼不使用self.progressBar.hidden = true/false?通過這樣做,一旦不再使用,您可以創建一次progressBar一次,然後創建removeFromSuperview

func showProgressBar(showBar: Bool){ 
    if showBar { 
     // Check this first 
     if progressBar == nil { 
      let viewHeight = view.frame.size.height 
      progressBar = Bundle.main.loadNibNamed("progressBar", owner: nil, options: nil)?.first as? UIView 
      progressBar?.frame = CGRect(x: 0, y: viewHeight - 80 , width: self.view.frame.width, height: 80) 
      if let bar = progressBar { 
       self.view.addSubview(bar) 
      } 
     } 
    } else { 
     DispatchQueue.main.async() { 
      self.progressBar?.removeFromSuperview() 
     } 
    } 
} 
+0

我想過了,但progressBar對用戶來說很少顯示,所以我認爲,從性能角度來看,它總是隱藏在應用程序中沒有任何意義 –

+0

很可能您會創建一個新的progressBar '而現有的還在那裏。在創建一個新的之前,你應該首先檢查它是否被釋放。 – Lawliet

+0

謝謝。將ProgressBar作爲單例生成也是有意義的嗎? –

3

如果你調用showProgressBar兩次,這不是驗證了有沒有酒吧了,所以你可以添加第二個和丟失的第一個參考。因此,當你刪除它時,它只是刪除第二個而不起作用。