2012-08-16 13 views
8

मेरा टेक्स्ट पोर्ट्रेट मोड में दो लाइन लंबी है। जब मैं लैंडस्केप मोड में स्विच करता हूं, तो यह एक पंक्ति में फिट बैठता है। मैं स्टोरीबोर्ड के माध्यम से स्थिर टेबलव्यू सेल का उपयोग कर रहा हूं; मैं चुपके से फिट करने के लिए पंक्ति का आकार कैसे बदल सकता हूं?रैपिंग लेबल वाले स्थिर तालिका कोशिकाओं के लिए गतिशील ऊंचाई?

स्क्रीन एक साइनइन स्क्रीन है।

  • प्रथम कक्ष कुछ स्पष्टीकरण पाठ
  • दूसरा है खाता नाम
  • तीसरे है पासवर्ड
  • में प्रवेश के लिए एक सुरक्षित पाठ क्षेत्र में प्रवेश करने के लिए एक पाठ फ़ील्ड में चौथे (और अंतिम) सेल में साइनइन बटन होता है। कीबोर्ड पर return कुंजी प्रपत्र सबमिट या फोकस के रूप में उपयुक्त स्विच
+0

चेक स्विफ्ट का एक बेहतर समाधान http://stackoverflow.com/ निम्नलिखित प्रश्न/30450434/आकृति-आउट-साइज-ऑफ-यूलाबेल-आधारित-ऑन-स्ट्रिंग-इन-स्विफ्ट – David

+0

एक ही समस्या नहीं है। –

उत्तर

9

उपयोग UITableView's heightForRowAtIndexPath:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    int topPadding = 10; 
    int bottomPadding = 10; 
    float landscapeWidth = 400; 
    float portraitWidth = 300; 

    UIFont *font = [UIFont fontWithName:@"Arial" size:22]; 

    //This is for first cell only if you want for all then remove below condition 
    if (indexPath.row == 0) // for cell with dynamic height 
    { 
     NSString *strText = [[arrTexts objectAtIndex:indexPath.row]; // filling text in label 
    if(landscape)//depends on orientation 
    { 
     CGSize maximumSize = CGSizeMake(landscapeWidth, MAXFLOAT); // change width and height to your requirement 
    } 
    else //protrait 
    { 
     CGSize maximumSize = CGSizeMake(portraitWidth, MAXFLOAT); // change width and height to your requirement 
    } 

    //dynamic height of string depending on given width to fit 
    CGSize textSize = CGSizeZero; 
    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") 
    { 
     NSMutableParagraphStyle *pstyle = [NSMutableParagraphStyle new]; 
     pstyle.lineBreakMode = NSLineBreakByWordWrapping; 

     textSize = [[strText boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName :font,NSParagraphStyleAttributeName:[pstyle copy]} context:nil] size]; 
    } 
    else // < (iOS 7.0) 
    { 
     textSize = [strText sizeWithFont:font constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping] 
    } 

    return (topPadding+textSize.height+bottomPadding) // caculate on your bases as u have string height 
    } 
    else 
    { 
     // return height from the storyboard 
     return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
    } 
} 

संपादित: > and < ios7 के लिए और के रूप में support के लिए जोड़ा गया sizeWithFont विधि iOS 7.0

में हटा दिया गया है
+0

यदि मैं ऐसा करता हूं, तो मुझे केवल अपने पहले, सही के बजाय प्रत्येक सेल की ऊंचाई को मैन्युअल रूप से नियंत्रित करने की आवश्यकता है? (यह भयानक नहीं है, मैं बस स्पष्ट होना चाहता हूं।) –

+0

संपादित उत्तर की जांच करें। –

+0

धन्यवाद। मुझे लगता है कि यह कॉल स्टोरीबोर्ड + स्थिर कोशिकाओं के साथ काम नहीं करेगा, लेकिन मैंने जांच की है और आप बिल्कुल सही हैं। –

8

मुझे थोड़ा सरल कार्यान्वयन के साथ सफलता मिली है। जब तक आपके स्थिर तालिका दृश्य कोशिकाओं पर उचित की कमी के रूप में, आप के लिए यह आकार करने के लिए प्रणाली पूछ सकते हैं:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    let cell = self.tableView(self.tableView, cellForRowAtIndexPath: indexPath) 
    let height = ceil(cell.systemLayoutSizeFittingSize(CGSizeMake(self.tableView.bounds.size.width, 1), withHorizontalFittingPriority: 1000, verticalFittingPriority: 1).height) 
    return height 
} 
+1

यह एक बहुत पुराना सवाल था। आधुनिक आईओएस में यदि आपकी बाधाएं उचित हैं और आप एक अनुमान फ़ंक्शन जोड़ें जो 'UITableViewAutomaticDimension 'देता है आपको ऊंचाई विधि लिखने की भी आवश्यकता नहीं है। :) –

+2

यह उत्तर अभी भी प्रासंगिक हो सकता है। मैंने आईओएस 9 में उदाहरणों में भाग लिया है जहां उचित बाधाओं के साथ एक स्थिर तालिका दृश्य लेबल के पाठ को बदलने के बाद गतिशील रूप से आकार बदल नहीं पाएगा। उपरोक्त कार्य-आसपास समस्या हल करती है, जबकि UITableViewAutomaticDimension नहीं करता है। –

+0

यह दिलचस्प है, धन्यवाद। :) –