मैं एक NSTextView और मैं आवश्यकताओं में से एक के साथ काम कर रहा हूँ की चौड़ाई के साथ तैयार कर रहे हैं कि एक टैब वर्ण, '\ t', एक ही होगा है चार रिक्त स्थान के रूप में चौड़ाई।कैसे इतना है कि मेरी टैब वर्ण 4 अक्षर
तो पाठ-सामग्री इस प्रकार दिखाई देगा:
AAAA
AAAA - 1 tab
AAAA - 4 spaces
और यह मैं यह कैसे पूरा है:
// done when NSTextView first loaded and when
// delegate's textDidBeginEditing gets called: (perhaps overkill, but is a work in progress).
- (void)updateMyTextViewTextAttributes
{
NSMutableParagraphStyle* paragraphStyle = [[myTextView defaultParagraphStyle] mutableCopy];
if (paragraphStyle == nil) {
paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
}
float charWidth = [[myFont screenFontWithRenderingMode:NSFontDefaultRenderingMode] advancementForGlyph:(NSGlyph) ' '].width;
[paragraphStyle setDefaultTabInterval:(charWidth * 4)];
[paragraphStyle setTabStops:[NSArray array]];
[myTextView setDefaultParagraphStyle:paragraphStyle];
NSMutableDictionary* typingAttributes = [[myTextView typingAttributes] mutableCopy];
[typingAttributes setObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
[typingAttributes setObject:scriptFont forKey:NSFontAttributeName];
[myTextView setTypingAttributes:typingAttributes];
}
यह उचित लेआउट की अनुमति देता है और साथ ही प्रारंभिक पाठ के साथ दिखाया जा सकता है जैसे टाइपिंग गुणों को वही रखें।
समस्या यह है कि अंत उपयोगकर्ता फॉन्ट बदल सकता है। और जब ऐसा होता है, नमूना पाठ misaligned हो जाता है। बहुत नीचे की तरह:
[smaller font]
AAAA
AAAA - 1 tab
AAAA - 4 spaces
[larger font]
AAAA
AAAA - 1 tab
AAAA - 4 spaces
मैं myTextView के setNeedsDisplay बुला की कोशिश की है: हाँ के रूप में मैंने पढ़ा है कि यह NSTextView के setNeedsDisplayInRect बुला समाप्त होता है: avoidAdditionalLayout पैरामीटर के लिए कोई नहीं के साथ avoidAdditionalLayout। यह कुछ भी नहीं बदला है।
मैं बुला मेरी updateMyTextViewTextAttributes फोन जब myTextView नई myFont सेट है की कोशिश की है। यह एक चीज़ नहीं बदलता है।
मैंने myTextView के पाठक के पाठ के लिए LayoutForTextContainer सुनिश्चित करने के लिए myTextView के लेआउट प्रबंधक को यह भी करने का प्रयास किया है। कोई परिवर्तन नहीं होता है।
इस बिंदु पर, मुझे यकीन है कि आगे क्या करने की कोशिश करना नहीं हूँ। कोई सुझाव?
मैं कोड की धारा पाया: "[[myFont screenFontWithRenderingMode: NSFontDefaultRenderingMode] advancementForGlyph: (NSGlyph) '']। चौड़ाई;" प्रोग्रामरेटिक निर्दिष्ट टैब-चौड़ाई को संभालने के लिए वर्णित कुछ कोड में ऑनलाइन।अगर मैं इसे केवल "[myFont advancementForGlyph: (NSGlyph) ']। Width;", लाइनें अब मेल नहीं खाती हैं। आपने दस्तावेज़ से उद्धृत किया है, लेकिन इसमें वही वांछित कार्यक्षमता नहीं है ... –