2012-07-13 7 views
6

घुमाता है, मैंने एक कस्टम कीबोर्ड दृश्य बनाया है और इसे UITextField की इनपुट व्यू प्रॉपर्टी से लिंक किया है। क्या कस्टम इनपुट की ऊंचाई बदलने का कोई तरीका है जब अभिविन्यास में परिवर्तन होता है और फ्रेम कुंजीपटल सिस्टम कीबोर्ड की तरह आसानी से एनिमेटेड होता है? मेरा कीबोर्ड आकार 768x272 है और जब डिवाइस परिदृश्य जाता है तो आकार 1024x272 हो जाता है, लेकिन मैं इसे 1024x372 की तरह बड़ा बनाना चाहता हूं। यदि मैं UIDeviceOrientationDidChangeNotification प्राप्त करता हूं तो नीचे दिए गए कोड के साथ फ्रेम को बदलता हूं, तो परिवर्तन एनीमेशन चिकनी नहीं है।कस्टम इनपुट की ऊंचाई बदलना देखें जब डिवाइस

textField.inputView.frame = CGRectMake(0,0,1024,372); 
+0

क्या आपने इसे एनीमेशन ब्लॉक के तहत डालने का प्रयास किया ?? – Zaraki

+0

मैंने इसे में एक एनीमेशन ब्लॉक के रूप में डालने की कोशिश की है .RotateToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation अवधि: (NSTimeInterval) अवधि लेकिन परिणाम वही है, ऊंचाई तुरंत छोटे से लंबा हो जाती है, फिर एनीमेशन इसे छोटा कर देता है विस्तृत। – user1477781

उत्तर

2

कई प्रयोगों के बाद, मैं अपने ही सवाल का सर्वश्रेष्ठ उत्तर मिल गया। जब आप UIKeyboardDidHideNotification प्राप्त करते हैं तो एक संक्षिप्त उत्तर परिवर्तन फ्रेम होता है।

कस्टम इनपुट व्यू UIPeripheralHostView नामक सिस्टम द्वारा नियंत्रित किसी अन्य दृश्य में एम्बेड किया गया है। तो गलत समय पर कस्टम इनपुट व्यू को बदलना तुरंत दिखाई नहीं देता है या सबसे अच्छा एक बदसूरत लेआउट दिखाता है।

जब डिवाइस घुमाता है, तो सिस्टम संक्षेप में कीबोर्ड को छुपाता है, फिर कुंजीपटल की रोटेशन एनीमेशन पुराने अभिविन्यास से नए अभिविन्यास तक करता है। मुझे लगता है कि एनीमेशन ब्लॉक दो अधिसूचनाओं UIKeyboardDidHideNotification और UIKeyboardWillShowNotification के बीच कहीं भी डाला गया है। ये नोटिफिकेशन UIKeyboardWillChangeFrameNotification के साथ मिलकर हैं। इस अधिसूचना में "फ्रेम" का अर्थ वास्तव में UIPeripheralHostView का फ्रेम है।

तो मेरी इनपुट दृश्य के फ्रेम बदल रहा है जब मैं UIKeyboardDidHideNotification प्रणाली उन्मुखीकरण परिवर्तन के दौरान लंबा कुंजीपटल करने के लिए कम कीबोर्ड से सुचारु में जिसके परिणामस्वरूप, एनीमेशन शुरू होने से पहले UIPeripheralHostView के फ्रेम को समायोजित करने का मौका देता मिलता है।

यह आईओएस 5 में काम करता है लेकिन ऐप्पल भविष्य में अभ्यास को बदल सकता है।

+0

आईओएस 6 में जब आप कस्टम इनपुट देखेंगे तो आपको UIKeyboardWillShowNotification आदि अधिसूचनाएं प्राप्त नहीं होंगी – theraven

6
UIResponder.inputView के लिए

प्रति Apple documentation: "UIKit अपने autoresizing नकाब में एक UIViewAutoresizingFlexibleHeight मूल्य के साथ एक इनपुट दृश्य का सामना करना पड़ता है, यह ऊंचाई कुंजीपटल मैच के लिए बदल जाता है।"

तो यदि आप अनुकूलित ऊंचाई चाहते हैं, तो आपको UIVieAutoresizingFlexibleHeight मुखौटा निर्दिष्ट नहीं करना चाहिए।

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