मैं ऑटो लेआउट सीखने की कोशिश कर रहा हूं, आखिरकार सोचा कि जब यह हुआ तो मुझे उस पर लटका मिल रहा था। मैं प्रोटोटाइप कोशिकाओं और लेबल के साथ खेल रहा हूँ। मैं एकऑटोलायआउट मल्टीलाइन UILabel कुछ पाठ को काट रहा है
- शीर्षक,
titleLbl
के लिए कोशिश कर रहा हूँ - चित्र में नीले बॉक्स - पैसा,
moneyLbl
- चित्र में हरे बॉक्स - उपशीर्षक/विवरण,
subTitleLbl
- तस्वीर में लाल बॉक्स
अब तक मैं इस राशि 363,210
क्या मैं हासिल करना चाहते हैं:
- हरे बॉक्स हमेशा 1 लाइन पर प्रदर्शित करना चाहिए पूरी तरह से
- हरे बॉक्स के अंदर मूल्य नीले बॉक्स के आधार पर केंद्रित होना चाहिए
- नीले बॉक्स ले जाएगा शेष स्थान (2 के बीच क्षैतिज बाधा के लिए -8 पीएक्स) और यदि आवश्यक हो तो एकाधिक लाइनों पर प्रदर्शित करें
- लाल बॉक्स नीचे जितना आवश्यक हो उतना लाइनों के नीचे होना चाहिए और प्रदर्शित करना चाहिए।
जैसा कि आप देख सकते हैं कि यह आखिरी पंक्ति में उदाहरण के अपवाद के साथ लगभग सभी काम कर रहा है। मैंने इस पर शोध करने की कोशिश की है और जो मैं इकट्ठा कर सकता हूं वह आंतरिक सामग्री आकार के साथ कुछ करना है। ऑनलाइन पोस्ट कई पोस्ट setPreferredMaxLayoutWidth
सेट करने की सलाह देते हैं, मैंने इसे titleLbl
के लिए कई स्थानों पर किया है और इसका कोई प्रभाव नहीं पड़ा है। केवल 180
पर हार्डकोडिंग करने पर मुझे परिणाम मिलते थे, लेकिन इसमें पाठ के नीचे/नीचे के अन्य नीले रंग के बक्से में व्हाइटस्पेस/पैडिंग भी शामिल था, जो लाल/नीले रंग के बक्से के बीच की जगह को काफी बढ़ाता था।
यहाँ मेरी कमी कर रहे हैं:
शीर्षक:
मनी:
उपशीर्षक:
परीक्षण मैं अन्य पाठ नमूने यह होता है के साथ चलाने के आधार पर किया है स्टोरीबोर्ड में दिखाए गए चौड़ाई का उपयोग करने लगते हैं, लेकिन इसे ठीक करने का कोई भी प्रयास काम नहीं कर रहा है।
मैं सेल के एक इवर बनाया है और यह प्रयोग किया जाता सेल की ऊंचाई बनाने के लिए है:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
[sizingCellTitleSubMoney.titleLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"title"]];
[sizingCellTitleSubMoney.subtitleLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"subtitle"]];
[sizingCellTitleSubMoney.moneyLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"cost"]];
[sizingCellTitleSubMoney layoutIfNeeded];
CGSize size = [sizingCellTitleSubMoney.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height+1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MATitleSubtitleMoneyTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifierTitleSubTitleMoney];
if(!cell)
{
cell = [[MATitleSubtitleMoneyTableViewCell alloc] init];
}
cell.titleLbl.layer.borderColor = [UIColor blueColor].CGColor;
cell.titleLbl.layer.borderWidth = 1;
cell.subtitleLbl.layer.borderColor = [UIColor redColor].CGColor;
cell.subtitleLbl.layer.borderWidth = 1;
cell.moneyLbl.layer.borderColor = [UIColor greenColor].CGColor;
cell.moneyLbl.layer.borderWidth = 1;
[cell.titleLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"title"]];
[cell.subtitleLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"subtitle"]];
[cell.moneyLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"cost"]];
return cell;
}
मैं कोशिश की है setPreferredMaxLayoutWidth
सेल के लेआउट subviews अंदर की स्थापना:
- (void)layoutSubviews
{
[super layoutSubviews];
NSLog(@"Money lbl: %@", NSStringFromCGRect(self.moneyLbl.frame));
NSLog(@"prefferredMaxSize: %f \n\n", self.moneyLbl.frame.origin.x-8);
[self.titleLbl setPreferredMaxLayoutWidth: self.moneyLbl.frame.origin.x-8];
}
लॉग :
2014-04-30 21:37:32.475 AutoLayoutTestBed[652:60b] Money lbl: {{209, 20}, {91, 61}}
2014-04-30 21:37:32.475 AutoLayoutTestBed[652:60b] prefferredMaxSize: 201.000000
जो मैं उम्मीद करता हूं कि 2 तत्वों के बीच 8px है और कंसोल यह सत्यापित करता है।यह पहली पंक्ति पर पूरी तरह से काम करता है इससे कोई फर्क नहीं पड़ता कि मैं ब्लू बॉक्स में कितना टेक्स्ट जोड़ता हूं, जो स्टोरीबोर्ड जैसा ही है, लेकिन हरे रंग के बॉक्स में कोई भी वृद्धि चौड़ाई की गणना से फेंकता है। मैंने इसे tableView:willDisplayCell
और tableView:heightForRowAtIndexPath:
में अन्य प्रश्नों के उत्तर के आधार पर सेट करने का प्रयास किया है। लेकिन कोई फर्क नहीं पड़ता कि यह सिर्फ लेआउट नहीं है।
किसी भी मदद की, विचार या टिप्पणियों का बहुत सराहना की जाएगी
इनपुट के लिए धन्यवाद, लेकिन मुझे खेद है कि यह कोई रास्ता नहीं है। मुद्दा (जैसा कि मेरे उत्तर द्वारा उल्लिखित है) यह है कि यह हरे रंग के लेबल से 'एक्स' स्थिति का उपयोग कर रहा था इससे पहले कि हरे रंग के लेबल को अपनी सामग्री में फिट करने के लिए बढ़ाया गया हो। अधिकांश मामलों में मल्टीलाइन लेबल का उपयोग करते समय आपको 'setPreferredMaxLayoutWidth' सेट करने की आवश्यकता होती है, मुझे नीले रंग के इस मान की गणना करने के लिए हरे रंग की प्रदर्शित चौड़ाई की गणना करने की आवश्यकता होती है। एक बार यह सेट हो जाने के बाद, यह सही ऊंचाई –