2014-06-13 12 views
6

के साथ ठीक से आकार बदलने का दृश्य नहीं है मेरे पास एक सरल लेआउट है, जिसमें NSView और इसके सबव्यू एनएसटीक्स्ट व्यू शामिल हैं। NSTextView कुछ पाठों से प्रोग्राम किए गए प्रोग्रामेटिक रूप से भरा हुआ है जो एकाधिक लाइनों को जन्म देता है। मैं ऑटो लेआउट का उपयोग करके सब कुछ एक साथ जोड़ता हूं (सभी प्रोग्रामेटिक रूप से किया जाता है)। हालांकि, जब सबकुछ प्रदर्शित होता है तो NSTextView काट दिया जाता है, केवल एक पंक्ति दिखाई दे रही है।NSTextV ऑटो लेआउट

वेब की खोज करने के बाद, सबसे अच्छा जवाब मैं मिल सकता था:

Using Autolayout with expanding NSTextViews

हालांकि, यह केवल काम करता है अगर मैं मैन्युअल के बाद सब कुछ प्रदर्शित किया जाता है NSTextView में पाठ बदलने (जो वास्तव में मेरे उपयोग नहीं है मामला)। विचारों को समायोजित किया गया है और संपूर्ण NSTextView प्रदर्शित होता है।

मैं यह पता लगाने की कोशिश कर रहा हूं कि NSViewController को सबव्यूज़ डालने के साथ किया जाता है ताकि मैं NSTextView पर invalidateIntrinsicContentSize पर कॉल कर सकूं। UIViewController में viewDidLayoutSubviews के बराबर।

मैंने अभी तक कुछ भी करने की कोशिश नहीं की।

  • के बाद मैं अपने पाठ

साथ NSTextView भरा loadView

  • के अंत में इस लक्ष्य को हासिल करने के लिए एक बेहतर तरीका है: मैं NSTextView के लिए invalidateIntrinsicContentSize बुला का प्रयास किया?

    1. कस्टम NSView उपवर्ग कि NSTextView
    2. शामिल NSView उपवर्ग ओवरराइड में layout विधि invalidateIntrinsicContentSize

    इसके अलावा इस लिंक है कि बताते हैं की जाँच कॉल बनाएँ:

  • उत्तर

    6

    आगे अनुसंधान के बाद, इस सवाल का जवाब मिल गया ऑटो लेआउट और आंतरिक सामग्री आकार (कई अन्य चीजों के बीच) की subtleties:

    http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html

    नमूना कोड:

    @interface MyView : NSView 
        @property MyTextView *textView; 
    @end 
    
    @implementation MyView 
    
    // init & create content & set constraints 
    
    -(void) layout { 
        [super layout]; 
        [self.textView invalidateIntrinsicContentSize]; 
    } 
    
    @end 
    

    MyTextView का कार्यान्वयन:

    @implementation MyTextView 
    
    - (NSSize) intrinsicContentSize { 
        NSTextContainer* textContainer = [self textContainer]; 
        NSLayoutManager* layoutManager = [self layoutManager]; 
        [layoutManager ensureLayoutForTextContainer: textContainer]; 
        return [layoutManager usedRectForTextContainer: textContainer].size; 
    } 
    
    - (void) didChangeText { 
        [super didChangeText]; 
        [self invalidateIntrinsicContentSize]; 
    } 
    
    @end 
    
    संबंधित मुद्दे