2010-07-24 9 views
9

अनिवार्य रूप से जो भी कोको समकक्ष [UILabel adjustsFontSizeToFitWidth] है।मैं एनएसटीक्स्टफिल्ड को अपने टेक्स्ट फिट करने के लिए अपने फ़ॉन्ट आकार को ऑटोरेसीज़ करने के लिए कैसे कह सकता हूं?

+0

मैं किसी और के लिए यह जवाब दे दिया। आप मेरा जवाब देख सकते हैं [यहां] (http://stackoverflow.com/questions/2908704/get-nstextfield-contents-to-scale/2911982#2911982)। ';' [NSMakeRange (0, [mutableAttributedString लंबाई]) mutableAttributedString removeAttribute:: @ "NSOriginalFont" रेंज] – regulus6633

उत्तर

1

मैंने जैरी क्रिनॉक के उत्कृष्ट एनएस (जिम्मेदार) स्ट्रिंग + जियोमेट्रिक्स (located here) और निम्न की तरह एक छोटी विधि का उपयोग किया। मुझे अभी भी एक आसान तरीके से रूचि है।

- (void) prepTextField:(NSTextField *)field withString:(NSString *)string 
{ 
    #define kMaxFontSize 32.0f 
    #define kMinFontSize 6.0f 
    float fontSize = kMaxFontSize; 
    while (([string widthForHeight:[field frame].size.height font:[NSFont systemFontOfSize:fontSize]] > [field frame].size.width) && (fontSize > kMinFontSize)) 
    { 
      fontSize--; 
    } 
    [field setFont:[NSFont systemFontOfSize:fontSize]]; 

    [field setStringValue:string]; 

    [self addSubview:field]; 
} 
2

सुपरक्लास में देखना न भूलें। एक एनएसटीक्स्टफिल्ड एक प्रकार का एनएससींट्रोल है, और प्रत्येक एनएससींट्रोल the sizeToFit message का जवाब देता है।

6

मैं एक NSTextFieldCell उपवर्ग जो स्ट्रिंग ड्राइंग ओवरराइड करता है बनाने के द्वारा इसका समाधान कर लिया। ऐसा लगता है कि स्ट्रिंग फिट बैठती है और यदि यह फिट होने तक फ़ॉन्ट आकार को कम नहीं करता है। इसे और अधिक कुशल बनाया जा सकता है और मुझे नहीं पता कि यह कैसे व्यवहार करेगा जब cellFrame की चौड़ाई 0 है। फिर भी यह मेरी आवश्यकताओं के लिए अच्छा पर्याप्त ™ था।

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    NSAttributedString *attributedString; 
    NSMutableAttributedString *mutableAttributedString; 
    NSSize stringSize; 
    NSRect drawRect; 

    attributedString = [self attributedStringValue]; 

    stringSize = [attributedString size]; 
    if (stringSize.width <= cellFrame.size.width) { 
     // String is already small enough. Skip sizing. 
     goto drawString; 
    } 

    mutableAttributedString = [attributedString mutableCopy]; 

    while (stringSize.width > cellFrame.size.width) { 
     NSFont *font; 

     font = [mutableAttributedString 
      attribute:NSFontAttributeName 
      atIndex:0 
      effectiveRange:NULL 
     ]; 
     font = [NSFont 
      fontWithName:[font fontName] 
      size:[[[font fontDescriptor] objectForKey:NSFontSizeAttribute] floatValue] - 0.5 
     ]; 

     [mutableAttributedString 
      addAttribute:NSFontAttributeName 
      value:font 
      range:NSMakeRange(0, [mutableAttributedString length]) 
     ]; 

     stringSize = [mutableAttributedString size]; 
    } 

    attributedString = [mutableAttributedString autorelease]; 

drawString: 
    drawRect = cellFrame; 
    drawRect.size.height = stringSize.height; 
    drawRect.origin.y += (cellFrame.size.height - stringSize.height)/2; 
    [attributedString drawInRect:drawRect]; 
} 
+0

फ़ॉन्ट सही ढंग से, खड़ी केंद्र निम्न पंक्ति सही 'while' से पहले की जरूरत है बनाने के लिए – DarkDust

संबंधित मुद्दे

 संबंधित मुद्दे