2011-03-07 14 views
15

आईओएस ह्यूमन इंटरफ़ेस दिशानिर्देश से ऊंचाई, iOS UI Element Usage GuidelinesUIToolbar पर डिवाइस रोटेशन

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

मैं ऊंचाई मेल में 32 अंक के लिए 44 अंक से बदल रहा है देख सकते हैं, iPhone के लिए ट्विटर और ड्रॉपबॉक्स उदाहरण के लिए, लेकिन जब मैं एक उपकरण पट्टी (इंटरफ़ेस बिल्डर के साथ) जोड़ सकते हैं और मेरे UIViewController है स्वचालित रूप से घूमने के लिए उपclass (shouldAutorotateToInterfaceOrientation: हाँ देता है), टूलबार डिवाइस रोटेशन पर स्वचालित रूप से अपनी ऊंचाई नहीं बदलता है।

UIToolbar Class Reference ऊंचाई के इस स्वत: परिवर्तन का उल्लेख नहीं है, इसलिए मैं यह प्रोग्राम के रूप में परिवर्तित करने के लिए भले ही एचआईजी कहते एक उपकरण पट्टी प्रोग्राम के रूप में की ऊँचाई निर्दिष्ट नहीं है चाहिए?

उत्तर

15

से 7KV7 जवाब टिप्पणियों में yonel और जॉर्ज द्वारा बताया गया है, autoresizing मुखौटा बदल रहा है काम नहीं करता है के रूप में के रूप में मैं -[UIView sizeThatFits:] विधि का उपयोग कर एक और समाधान पाया आईओएस 5.

पर करना है। यहाँ है कैसे मैंने किया:

- (void) layoutForInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Adjust the toolbar height depending on the screen orientation 
    CGSize toolbarSize = [self.toolbar sizeThatFits:self.view.bounds.size]; 
    self.toolbar.frame = (CGRect){CGPointMake(0.f, CGRectGetHeight(self.view.bounds) - toolbarSize.height), toolbarSize}; 
    self.webView.frame = (CGRect){CGPointZero, CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetMinY(self.toolbar.frame))}; 
} 

तब मैं अपने दृश्य नियंत्रक viewWillAppear: और willAnimateRotationToInterfaceOrientation:duration: तरीकों में इस layoutForInterfaceOrientation: विधि कॉल।

ऊंचाई फिर भी प्रोग्रामेटिक रूप से बदल दी गई है लेकिन कम से कम मूल्य हार्डकोड नहीं किया गया है।

19

क्या आपने टूलबार की स्वतः-आकार बदलने वाली संपत्ति की जांच की?

+11

यह है कि, आप 'क्या करना toolbar.autoresizingMask = toolbar.autoresizingMask है | UIViewAutoresizingFlexibleHeight; 'प्रोग्रामेटिक रूप से इंटरफ़ेस बिल्डर के रूप में आपको लचीला ऊंचाई बदलने की अनुमति नहीं है! – 0xced

+0

यदि उत्तर आपकी मदद करता है तो कृपया उत्तर स्वीकार करें। हैप्पी कोडिंग :) – visakh7

+2

क्या आपके पास इस समाधान के साथ आईओएस 5.0 के साथ साइड इफेक्ट नहीं है? यह ठीक काम करता है लेकिन टूलबार में आइकन हमेशा लैंडस्केप (= छोटा) आकार होता है, यहां तक ​​कि पोर्ट्रेट में भी:/ – yonel

2

यदि आप नेविगेशन नियंत्रक के अंदर व्यू कंट्रोलर का उपयोग करते हैं, तो आप अपना खुद का निर्माण करने के बजाय नेविगेशन नियंत्रक के टूलबार का उपयोग कर सकते हैं, और इसे आकार बदलने को संभालने दें। वास्तव में ViewController की toolbarItems संपत्ति वास्तव में है।

+1

पर ऑटोसाइजिंग बॉक्स दिखाई देगा, मुझे इस समाधान के बारे में पता है, लेकिन जब आप व्यू कंट्रोलर बी को कंट्रोलर ए पर देखते हैं, यदि ए टूलबार और बी नहीं चाहता है एक टूलबार चाहता है, आप एक अच्छा * पुश * क्षैतिज एनीमेशन नहीं मिल सकता है। टूलबार एनीमेशन लंबवत है जबकि पुश संक्रमण एनीमेशन क्षैतिज है इसलिए यह मेरी राय में अजीब दिखता है। टूलबार को एनिमेट करना भी बदतर नहीं है। – 0xced

12

यह व्यवहार ऑटो लेआउट के साथ प्राप्त करने के लिए बहुत आसान है। मैं केवल iOS8 में परीक्षण किया है, लेकिन निम्नलिखित कोड उन्मुखीकरण परिवर्तन पर वांछित एनीमेशन के साथ मेरे लिए काम करता है:

public override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    toolbar.invalidateIntrinsicContentSize() 
} 
+0

आईओएस 9 पर बहुत अच्छा काम करता है। –

+0

यह लगभग काम करता है, मुझे InvalidateIntrinsicContentSize() के बाद toolbar.sizeToFit() जोड़ना पड़ा; – C0C0AL0C0

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