2011-01-13 7 views
20

क्या मैं ऐसी चीजों को प्रदर्शन विधि में डालता हूं? या क्या कुछ समान है?क्या NSView के पास UIView के सेटNeedsLayout/layoutSubviews विधियों के समान कुछ है?

+0

संभावित को डुप्लिकेट [कोको - एनएसविंडो को अपनी सामग्री को फिर से चलाने के लिए सही तरीका क्या है?] (Http://stackoverflow.com/questions/4676412/cocoa-what-is-the-proper-way- to-tell-an-nswindow-to-redisplay-its-content) –

+4

मुझे लगता है कि यह एक अलग सवाल है। एक पूछ रहा है कि विंडो को स्क्रैच से सब कुछ फिर से चलाने के लिए कैसे बताना है। दूसरा केवल लेआउट के बारे में पूछ रहा है। –

+0

दरअसल: यह एक अलग सवाल है। – jonsibley

उत्तर

12

layoutSubviews के लिए आकस्मिक NSView की विधि resizeSubviewsWithOldSize: है। मुझे लगता है, setNeedsLayout के अनुरूप resizeSubviewsWithOldSize:[self frame].size सीधे कॉल करेगा।

9

OSX 10.7 के रूप में:

  • (शून्य) लेआउट

अब एक समान setNeedsLayout है layoutSubviews के बराबर है।

अवहेलना इस विधि अपने कस्टम दृश्य कस्टम लेआउट प्रदर्शन करने के लिए बाधा आधारित लेआउट प्रणाली का उपयोग कर व्यक्त नहीं की जरूरत है। इस मामले में आप setNeedsLayout को कॉल करने के लिए ज़िम्मेदार हैं: जब आपके कस्टम लेआउट में कुछ प्रभाव पड़ता है।

आप अपने लेआउट चरण के भाग के रूप में किसी भी बाधाओं को अमान्य नहीं हो सकता है, और न ही आपके विचार पदानुक्रम के बाहर अपने superview या विचारों के लेआउट अमान्य हो जाएगा। आप लेआउट के हिस्से के रूप में एक ड्राइंग पास भी नहीं ले सकते हैं।

आप अपने कार्यान्वयन के भाग के रूप [सुपर लेआउट] कॉल करना होगा।

+4

इस बाधा आधारित लेआउट केवल (उर्फ 'ऑटो Layout') – UncleAli

1

कभी कभी, resizeSubviewsWithOldSize बुलाया प्राप्त करता है। फिर, resizeWithOldSuperviewSize ओवरराइड करने का प्रयास करें।

1

resizeSubviewsWithOldSize: लगता है जैसे कि यह कुछ नहीं करता है। मेरे लिए कभी भी बुलाया नहीं जाता है। शायद ऐसा इसलिए है क्योंकि मैं ऑटोलाउट का उपयोग करता हूं और प्रलेखन का कहना है कि यह ऑटोरेसाइजिंग से संबंधित है।

NSView के लेआउट UIView के layoutSubviews रूप में एक ही प्रतीत होता है। यदि आप प्रतिस्थापित करने या ऑटोरेसाइजिंग के अलावा कुछ विशेष काम करना चाहते हैं तो वे दोनों अतिव्यापी हैं।

UIView

[view setNeedsLayout]; 

पर इस कॉलिंग NSView

view.needsLayout = YES; 

कौन सा सवाल है, क्यों "setNeedsLayout" यहां तक ​​कि एक समारोह का नाम है भीख माँगता पर इस रूप में एक ही प्रतीत हो रहा है? वास्तव में, आपने एक सेटर फ़ंक्शन से पैरामीटर को हटाने का निर्णय लिया है, और शीर्षक में "सेट" रखा है? क्यों नहीं "शेड्यूलआउट"? इससे इस तरह के स्टैक ओवरफ़्लो प्रश्नों की आवश्यकता को कमजोर कर दिया जाएगा।

+0

अपने निष्कर्षों पोस्ट करने के लिए धन्यवाद के लिए है। – mattsven

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