我正在使用Autolayout在我的自定義UITableViewCell
中使用水平分頁UIScrollView
。我已成功將UIScrollView
添加到具有所有適當約束的單元格中。 使用Autolay在自定義UITableViewCell上使用Autolayout分頁UIScrollView
當我嘗試加載UIScrollView
視圖時出現問題。我重寫了自定義單元格的layoutSubviews
方法並在其中加載了ScrollView的視圖,因爲這是我能找到Autolayout的約束已加載的唯一方法。因此,給我精確的參考ScrollView的大小。
-(void)layoutSubviews {
[super layoutSubviews];
for(int i=0; i<self.scrollArray.count; i++) {
CGRect frame;
CGFloat width = self.theScrollView.frame.size.width;
frame.origin.x = width * i;
frame.origin.y = 0;
frame.size = self.theScrollView.frame.size;
UIView *subview = [[UIView alloc] initWithFrame:frame];
[subview addSubview:[self.scrollArray objectAtIndex:i]];
[self.theScrollView addSubview:subview];
}
CGSize contentSize = CGSizeMake(self.theScrollView.frame.size.width * self.scrollArray.count, self.theScrollView.frame.size.height);
self.theScrollView.contentSize = contentSize;
self.theScrollView.contentOffset = CGPointMake(0, 0);
}
然而,layoutSubviews
叫我的細胞多次,從而增加了超過必要的子視圖我UIScrollView
。有沒有更好的方法來加載我的子視圖,我不知道?或者有沒有辦法使用layoutSubviews
但確保我的子視圖只加載UIScrollView
一次?
一個簡單的解決方案是存儲您在首次添加子視圖時設置的布爾屬性。如果此屬性在後續調用佈局子視圖時爲YES,則不要再次添加它們。或者將scrollview添加到單元格中,並通過屬性顯示它,然後在'cellForRowAtIndexPath'中添加子視圖。 – Paulw11
@ Paulw11 - 感謝您的回覆。從我注意到的情況來看,約束只在最後一次調用'layoutSubviews'時設置,這意味着我需要一些方法來檢測最終調用,或者是否設置了約束。另外,我嘗試在'cellForRowAtIndexPath'中添加子視圖,並且還沒有設置約束。 – hgwhittle
如果子視圖已經存在,那麼你仍然可以調用'layoutIfNeeded'和/或調整子視圖的大小,你只需要確保你只添加它們一次 – Paulw11