2016-11-07 80 views
1

我對Xcode和Swift編程比較陌生,在我的第一個應用程序中,它包含一個TableView和一個自定義的TableViewCell,它覆蓋變量框架以覆蓋視圖的整個寬度:刪除自定義UITableViewCell框架問題的行

override var frame: CGRect { 
     get { 
      return super.frame 
     } 

     set { 
      var frame = newValue 
      frame.origin.x += 175 
      frame.size.width -= 350 
      super.frame = frame 
     } 
    } 

一切正常,但是當我刪除泰伯維細胞與self.tableView.deleteRows(at: [path], with: .automatic),似乎與細胞一個奇怪的問題;它看起來像細胞再次得到一個新的(小)框架比舊的,但只有可見細胞;如果單元重新加載,問題就消失了。所以它恰好在刪除之後發生;如果細胞離開屏幕然後再次出現,它會回到正常大小。 我的猜測是`newValueis已經是一個自定義框架,然後再次定製,這使得它更小;但我不知道如何解決這個問題!

下面是iPad版截圖:

Normal tableview

After deleting

任何幫助將不勝感激!如果您需要更多信息,請在評論中告知我們!謝謝!

回答

0

我建議你不要干擾你的細胞框架你的方式。

  1. 集細胞的backgroundColorUIColor.clear
  2. 創建對細胞的contentView自定義視圖,水平居中和更窄的350分然後細胞本身。

或者

  1. 讓小於屏幕寬度整體的tableView的width 350點
  2. 忘記改變細胞的width

對於第一個建議視圖層次和自動佈局的限制將類似於對此:

enter image description here

問題是與自定義視圖我會遇到更多的麻煩 因爲每個單元的高度是彼此

這完全是另一個話題不同。你應該在這個RayWenderlich tutorial

使用動態單元格高度,詳細描述基本上,你需要正確設置自動佈局約束和爲此在viewDidLoad

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 140 

氣餒方法:

我的猜測是`newValueis已經是一個自定義框架,然後再次定製 ,這使得它更小;但我不知道如何 來解決這個問題!

如果你還是想用你的方法,不只是減少數值,使用UIScreen從頭開始計算它的或tableView「的這個

frame.origin.x += 175 
frame.size.width -= 350 
小號 width

相反

這樣做:

frame.origin.x = 175 
frame.size.width = UIScreen.main.bounds.size.width - 350 
+0

好的,謝謝你的你詳細的答案!從我的角度來看,第一個建議對我來說最有意義,但是您能否向我提供一些開始代碼,以便在contentview上實現此自定義視圖的方式和位置?我有一段時間沒有這樣做......謝謝! –

+0

@EliasDatler你在使用自動佈局嗎? – alexburtnik

+0

是的,只要我可以。 @alexburtnik –