2017-02-11 74 views
1

下面是我所說的「關閉底部邊框」的意思是:在UITableView中,如何在隱藏行之後關閉行的底部邊界?

enter image description here

第二行是目前「隱藏」(其高度設置爲0)。當用戶點擊第一行時,會出現第二行(其高度已恢復)。如果有幫助,這裏是隱藏和顯示第二行的代碼。

首先,我必須存儲在第二行是否是打開的成員變量(它與一個選擇器視圖中的行):

var referenceLengthPickerIsOpen: Bool = false 

這裏的高度是如何確定的:

override func tableView(_ tableView: UITableView, 
      heightForRowAt indexPath: IndexPath) -> CGFloat { 

    if indexPath.section == 0 && indexPath.row == 1 { 
     return referenceLengthPickerIsOpen ? 216.0 : 0.0 
    } 

    return super.tableView(tableView, heightForRowAt: indexPath) 
} 

以下是用戶點擊第一行以顯示或隱藏第二行的代碼:

override func tableView(_ tableView: UITableView, 
      didSelectRowAt indexPath: IndexPath) { 

    self.tableView.deselectRow(at: indexPath, animated: true) 

    if indexPath.section == 0 && indexPath.row == 0 { 
     referenceLengthPickerIsOpen = !referenceLengthPickerIsOpen 
     tableView.beginUpdates() 
     tableView.endUpdates() 
    } 
} 

顯示和隱藏部分效果很好,隨着第二行的高度從0變爲216,反之亦然,動畫不錯。

但是,隱藏第二行後,我留下了上圖中顯示的邊框間距。我知道原因:只有最後一行關閉底部邊框,並且目前隱藏。

我試圖通過改變行數是這樣解​​決這個問題:

override func tableView(_ tableView: UITableView, 
     numberOfRowsInSection section: Int) -> Int { 

    if section == 0 { 
     return referenceLengthPickerIsOpen ? 2 : 1; 
    } 

    return super.tableView(tableView, numberOfRowsInSection: section) 
} 

但只要我點擊第一行這只是崩潰我的應用程序。

+0

我相信,下邊框是'UITableView'分隔線。請讓我知道,如果不是。 – KrishnaCA

+0

這行'referenceLengthPickerIsOpen? 2:1'應該正常工作。你能告訴我崩潰報告,以便我可以研究它嗎? – KrishnaCA

回答

1

轉到故事板,選擇單元格轉到分隔符,自定義插圖並將其設置爲0.下面是圖像。

enter image description here

enter image description here

更新:

enter image description here

+0

謝謝。但是每個部分的頁腳邊距也變爲零,這使得文本正好對着視圖的左邊緣。 – redcurry

+0

不在我的例子中,我會張貼另一張圖片。 – Aragunz

+0

有趣。我想知道爲什麼我的頁腳邊距會隨着插圖而改變。無論如何,設置表格視圖插入的問題是它會影響所有行。我實際上想要行有一個插入,除非在下一行被隱藏的情況下(使前一行成爲最後一行,所以它應該有一個完整的下邊框)。 – redcurry

1

我相信下邊框可能是UITableView的默認分隔線。將separatorInsetUITableView設置爲0應該可以解決問題,如果這是真的

您可以通過以下方法完成。

self.tableView.separatorInset = UIEdgeInsets.zero 

上面的代碼關閉了底部邊框。

您可以通過隱藏分隔符來隱藏下邊框。

self.tableView.separatorColor = UIColor.clear 

請讓我知道它是否可以解決問題。

+0

謝謝。它幾乎可以工作。我在'viewDidLoad()'方法中將'separatorInset'設置爲零,但它也會導致頁腳左邊距爲零,因此文本正好位於左邊緣。 – redcurry