2015-09-27 27 views
1

我有一個UITableViewCell子類,我選擇將其設置爲layoutSubviews方法中的所有位置。我已經創建了一個特殊的視圖(基本上是一個視圖,其中包含UILabel)作爲此單元的子視圖,並且我想在layoutSubviews中正確定位,但我無法弄清楚。在單元格中,如何使用自動佈局定位和調整從筆尖創建的視圖?

每隔一個視圖我計算它的位置應該手動,然後調用setFrame。這看起來很奇怪,因爲它是從筆尖創建的,並使用自動佈局進行佈局,所創建的特殊視圖。但單元本身不使用自動佈局,所以我不確定要做什麼。

約束的明智,在它的標籤的獨特視角只是在從視圖中的每一個尺寸的標籤定位15pt它包含英寸

layoutSubviews我想基本上保持這種邏輯鑲石它的完整,但要確保它在細胞內的位置和尺寸正確。所以基本上我想保持自動佈局邏輯,使特殊視圖中的標籤保持原樣,但允許我使用setFrame將整個視圖本身放置在單元格內的位置和大小。基本上,在單元格內使用自動佈局的筆尖創建的視圖可以選擇不使用自動佈局。

我試過基本上打電話sizeThatFits:CGSizeZero來推斷它應該與自動佈局的大小,然後定位它,但它返回一個荒謬的大尺寸,沒有任何意義。即使我手動返回大小,我也會在控制檯中看到「約束衝突」警告,因爲在單元格中設置標籤的一個或多個自動佈局約束將被忽略。

我應該怎麼做?我應該如何讓視圖的子視圖尊重它的自動佈局系統,但是,如果我願意,允許我定位粘合視圖本身?

回答

1

您的特殊視圖具有所有有效的約束條件。它可以從其自動鋪設的子視圖中確定其寬度和高度。

代替使用sizeThatFits:CGSizeZero使用- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize目標尺寸爲UILayoutFittingCompressedSizeUILayoutFittingExpandedSize

然後根據這個返回的尺寸設置您的框架的寬度和高度,並根據您的喜好設置origin.x/.y。

如果您的標籤是多行,請在獲得配件尺寸之前設置其preferredMaxLayoutWidth

編輯:測試和工作!

相關問題