सही उत्तर हां है , आप ऐसा कर सकते हैं।
मुझे इस समस्या के बारे में कुछ हफ्ते पहले आया था। यह वास्तव में आसान है जितना आप सोच सकते हैं। अपनी कोशिकाओं को एनआईबी (या स्टोरीबोर्ड) में डालें और ऑटो लेआउट को सभी काम करने देने के लिए उन्हें पिन करें
निम्नलिखित संरचना को देखते हुए:
tableview
TableViewCell
CollectionView
CollectionViewCell
CollectionViewCell
CollectionViewCell
[... कोशिकाओं या विभिन्न सेल आकारों की परिवर्तनशील संख्या]
समाधान यह है कि पहले संग्रह दृश्य आकार की गणना करने के लिए ऑटो लेआउट को बताया जाए, फिर संग्रह सामग्री देखें, और इसे अपने सेल के आकार के रूप में उपयोग करें। यह उविवि विधि है कि "जादू करता है":
-(void)systemLayoutSizeFittingSize:(CGSize)targetSize
withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority
verticalFittingPriority:(UILayoutPriority)verticalFittingPriority
आपको यहां TableViewCell का आकार सेट करना होगा, जो आपके मामले में CollectionView की सामग्री है।
CollectionViewCell
पर CollectionViewCell आप हर बार जब आप मॉडल बदलने लेआउट करने के लिए सेल बताने के लिए है (उदाहरण के लिए: यदि आप एक पाठ के साथ एक UILabel निर्धारित करते हैं, तो सेल फिर से लेआउट हो गया है)।
- (void)bindWithModel:(id)model {
// Do whatever you may need to bind with your data and
// tell the collection view cell's contentView to resize
[self.contentView setNeedsLayout];
}
// Other stuff here...
TableViewCell
TableViewCell जादू करता है। इसमें आपके संग्रह दृश्य के लिए एक आउटलेट है, UICollectionViewFlowLayout के अनुमानित Itememize का उपयोग करके संग्रह दृश्य कोशिकाओं के लिए ऑटो लेआउट को सक्षम करता है ।
फिर, ट्रिक को अपने टेबल व्यू सेल के आकार को systemLayoutSizeFittingSize ... विधि पर सेट करना है । (नोट: iOS8 या बाद में)
नोट: मैंने डेलिगेट सेल के टेबल व्यू की ऊंचाई विधि का उपयोग करने की कोशिश की है। -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
लेकिन यह संग्रह लेआउट सामग्री की गणना करने के लिए ऑटो लेआउट सिस्टम के लिए बहुत देर हो चुकी है और कभी-कभी आपको गलत रिसाइज्ड सेल मिल सकती हैं।
@implementation TableCell
- (void)awakeFromNib {
[super awakeFromNib];
UICollectionViewFlowLayout *flow = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
// Configure the collectionView
flow.minimumInteritemSpacing = ...;
// This enables the magic of auto layout.
// Setting estimatedItemSize different to CGSizeZero
// on flow Layout enables auto layout for collectionView cells.
// https://developer.apple.com/videos/play/wwdc2014-226/
flow.estimatedItemSize = CGSizeMake(1, 1);
// Disable the scroll on your collection view
// to avoid running into multiple scroll issues.
[self.collectionView setScrollEnabled:NO];
}
- (void)bindWithModel:(id)model {
// Do your stuff here to configure the tableViewCell
// Tell the cell to redraw its contentView
[self.contentView layoutIfNeeded];
}
// THIS IS THE MOST IMPORTANT METHOD
//
// This method tells the auto layout
// You cannot calculate the collectionView content size in any other place,
// because you run into race condition issues.
// NOTE: Works for iOS 8 or later
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority {
// With autolayout enabled on collection view's cells we need to force a collection view relayout with the shown size (width)
self.collectionView.frame = CGRectMake(0, 0, targetSize.width, MAXFLOAT);
[self.collectionView layoutIfNeeded];
// If the cell's size has to be exactly the content
// Size of the collection View, just return the
// collectionViewLayout's collectionViewContentSize.
return [self.collectionView.collectionViewLayout collectionViewContentSize];
}
// Other stuff here...
@end
TableViewController
अपने TableViewController पर तालिका दृश्य कोशिकाओं के लिए ऑटो लेआउट सिस्टम को सक्षम करने के लिए याद रखें :
- (void)viewDidLoad {
[super viewDidLoad];
// Enable automatic row auto layout calculations
self.tableView.rowHeight = UITableViewAutomaticDimension;
// Set the estimatedRowHeight to a non-0 value to enable auto layout.
self.tableView.estimatedRowHeight = 10;
}
CREDIT: @rbarbera ने इसे सुलझाने में मदद की
UITableViewCell
इसकी एक्यूट टेबलव्यू से अलग की ऊंचाई है ? आप दोनों पर खड़ी स्क्रॉल की जरूरत हैUICollectionView
औरUITableView