簡體   English   中英

在UITableView上設置最小內容大小

[英]Setting a minimum content size on a UITableView

我在視圖控制器的頂部有一個視圖,在它的下面有一個tableview。

我這樣做的原因是,隨着tableview向上滾動,top view也向上滾動,最多可以滾動50點。

tableview的頂部插圖也為50:

tableView = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)

...,以便其單元格從頂視圖下方開始。

在scrollview委托中,有一些代碼類似於:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let scrollViewYOffset = ...
    topViewHeightConstraint.constant = max(minTopViewHeight, minTopViewHeight - scrollViewYOffset)
}

這樣可以確保當用戶在表格視圖上向下拖動時,頂視圖會“黏附”到該視圖上,並且當用戶將表格視圖向上推時也會被頂起。

我繪制了這張圖片,以更好地描述情節提要的外觀:

在此處輸入圖片說明

到現在為止還挺好。 當單元格很多並且用戶向上滾動表格視圖時,頂視圖會很好地保持在其最小高度。

但是,如果您向上滾動-頂視圖處於最小狀態-則單元數會減少,頂視圖會回切到其最大高度。

這是因為tableview的實際內容大小已降至其邊界高度以下,因此,作為scrollview,它會將內容的頂部再次帶到scrollview的頂部(當然還要加上50點的頂部插圖)。


我希望能夠向上滾動tableview,因此無論其包含的單元格數量如何(即,無論其內容大小如何),頂視圖都保持其最小高度。

誰能想到在表格視圖上設置最小內容大小的巧妙方法?

(到目前為止,我已經嘗試弄亂頁腳,在底部有一個單元格,該單元格實際上是一個分隔符-這弄亂了tableview的邏輯和我在其中的一些重新排序代碼。我試圖強制要約等。盡我所能,但還沒有弄清楚如何實現這一目標。)

我將不勝感激一些UI天才將我指向正確的方向:)謝謝。

更新:

感謝您的所有回答和評論。

在嘗試了各種類型的頁腳和頁眉視圖,調整滾動的約束和布局優先級,添加間隔單元格,將表格視圖放入滾動視圖等之后-最終我想到,這使我變得比需要的更加復雜,應該只需在scrollViewDidScroll上的contentInset值上更新問題的原因。

請參閱下面的答案,以獲取實現我所尋找的行為的代碼示例。

您可以嘗試的一些想法:

  • 在索引0上創建一個“虛擬”行,並將其高度設置為50(它將隱藏在頂視圖下方)。 也許您可以在第0節中保留該虛擬行,而在第1節中保留其余數據,因此在刪除數據時不必考慮它。

  • 或者,您可以將tableView標題的高度設置為50,而不是虛擬行

  • 也許在tableView上設置一個最小高度限制,並保持其內容壓縮優先級為高。

由於contentInset是導致tableview ping回錯誤點的原因,因此我只需要在上/下滾動tableview時調整內容插入。

這是我所做的一些示例代碼:

let maxPointsTopViewCanMoveUp: CGFloat = 50

let topInset = abs(min(max(-maxPointsTopViewCanMoveUp, scrollView.contentOffset.y), 0))
scrollView.contentInset = UIEdgeInsets(top: topInset, left: 0, bottom: 0, right: 0)
scrollView.scrollIndicatorInsets = UIEdgeInsets(top: topInset, left: 0, bottom: 0, right: 0)

let amountToMoveTopViewUp = maxPointsTopViewCanMoveUp - topInset
topViewToSuperviewTopConstraint.constant = amountToMoveTopViewUp

這是從表scrollViewDidScroll中調用的。

這意味着,當表格視圖中的單元格太少而無法填充內容時,表格視圖的頂部將停留在其向上滾動的位置(即,將其向上推的數量)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM