2014-09-21 13 views
5

के लिए ऊंचाई बदलें अपनी कस्टम कीबोर्ड की ऊंचाई बदलना documentation के अनुसार सरल है। यहाँ एप्पल के प्रलेखनआईओएस 8 कस्टम कीबोर्ड ऐप एक्सटेंशन - अभिविन्यास

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    let constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 400.0) 
    self.view.addConstraint(constraint) 
} 

यह काम करता है में दिखाया गया कोड की तेज-बराबर संस्करण है, लेकिन यह एक निरंतर मूल्य जो वांछनीय नहीं है यदि आप डिवाइस का अभिविन्यास बदलने के लिए ऊंचाई बदल जाता है। कीबोर्ड ऊंचाई को 400.0 पर सेट करना पोर्ट्रेट मोड में ठीक हो सकता है लेकिन यह संभवतः लैंडस्केप मोड में उपयुक्त नहीं होगा। उदाहरण के लिए: आईफोन 5 के लिए मानक कीबोर्ड दृश्य आकार चित्र में 320,216 और परिदृश्य में 568,162 है। निरंतर ऊंचाई सेट करने से चित्र दृश्य में 320,400 तक कीबोर्ड दृश्य आकार बदल जाता है और परिदृश्य में 568,400 (जो प्रभावी रूप से पूरी स्क्रीन है) बदलता है।

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

+0

भी वही उत्तर खोज रहे हैं – honcheng

उत्तर

2

मैंने अपने कीबोर्ड के दृश्य नियंत्रक में willAnimateRotationToInterfaceOrientation: को लागू करके ऐसा किया है। सैद्धांतिक रूप से हमें नए willTransitionToTraitCollection:withTransitionCoordinator: या आदर्श रूप से viewWillTransitionToSize:withTransitionCoordinator: का उपयोग करना चाहिए, लेकिन उन लोगों को कम से कम 8.0.2 के रूप में UIInputViewControllers पर कॉल नहीं किया जाना चाहिए। तो वर्तमान में सबसे अच्छा विकल्प आपकी ऊंचाई का संदर्भ रखने के लिए प्रतीत होता है, और willAnimateRotation के कार्यान्वयन में निरंतर संशोधित करना प्रतीत होता है।

मुझे भी याद है कि वास्तव में नया अभिविन्यास ढूंढने के साथ एक गॉचा था; मैंने कुछ ऐसा करने का अंत किया:

let isLandscape: Bool = UIInterfaceOrientationIsLandscape(toInterfaceOrientation) और उसके बाद इसका उपयोग करना।

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