ios - smart - macbook air features
आज iPad के लिए एक्सटेंशन ऊंचाई निर्दिष्ट की तुलना में बहुत बड़ी है (2)
मुझे इसे ठीक करने के लिए
viewDidLoad
प्रतिनिधि पद्धति पर विजेट के मान को हार्डकोड करना पड़ा:
import UIKit
import NotificationCenter
class TodayViewController: UIViewController, NCWidgetProviding {
override func viewDidLoad() {
super.viewDidLoad()
self.preferredContentSize = CGSize(width: 0, height: 320)
}
}
मेरे आज के एक्सटेंशन को विजेट प्रदर्शित होने वाली सामग्री के आधार पर एक गतिशील ऊंचाई की आवश्यकता है। मैं अपने निचले-सबसे तत्व पर एक बाधा जोड़कर इसे प्राप्त करने में सक्षम था: निचला लेआउट गाइड का शीर्ष 0 तत्व, प्राथमिकता 999, गुणक 1 के निरंतर के साथ, सबसे तत्व के तल के बराबर या उससे कम है।
यह बिल्कुल iPhones पर अपेक्षित रूप से काम करता है - विजेट की ऊँचाई सभी सामग्री के साथ फिट होती है और अगले विजेट दिखाए जाने से पहले डिफ़ॉल्ट निचला मार्जिन लागू होता है।
लेकिन iPad पर लगता है कि यह मेरे विजेट की ऊँचाई को अधिकतम ऊँचाई के बराबर कर देगा अधिसूचना केंद्र एक विजेट को अनुमति देगा - मेरे विजेट के नीचे बहुत सी जगह है, यह लगभग पूर्ण स्क्रीन है।
मैं उस अतिरिक्त स्थान को कैसे निकाल सकता हूं?
मुझे पता है कि समस्या क्या है, लेकिन यह निश्चित नहीं है कि इसे कैसे हल किया जाए - "समस्या" अनुभाग देखें। पहले मुझे सेटअप की व्याख्या करने दें:
स्थापित करना:
मैंने स्टोरीबोर्ड में इस एक्सटेंशन के दृश्य को सेट किया है, प्रोग्रामेटिक रूप से कुछ भी नहीं किया गया है।
दृश्य में 5 तत्व हैं जो लंबवत रूप से स्टैक्ड हैं, और कुछ अन्य क्षैतिज रूप से।
ये उस ऊर्ध्वाधर रेखा के लिए ऊपर से नीचे तक ऑटो लेआउट की कमी हैं - जहां प्राथमिकता नहीं बताई गई है 1000, गुणक 1:
UILabel: height = 35, top space to top layout guide with constant of 10
UIButton: equal height and width to a different button (whose aspect ratio is 1:1, there is no fixed width/height), top space to label 10
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8, bottom space to bottom layout guide <= 0 with priority 999
आवश्यक व्यवहार:
- मैं एक पूर्ण चौड़ाई लेबल के नीचे स्थित 4x4 बटन की एक ग्रिड की जरूरत है
- प्रत्येक बटन सटीक एक ही चौड़ाई और ऊंचाई होना चाहिए - सभी पूर्ण वर्ग
- बटनों की अंतिम पंक्ति के नीचे कोई अतिरिक्त स्थान नहीं है
परिणाम:
अपेक्षित परिणाम:
समस्या:
बटन के सभी पर पहलू अनुपात की बाधाएँ अप्रत्यक्ष रूप से एक 'निहित' पहलू अनुपात बाधा को विज़ेट व्यू की ऊँचाई पर तब लागू करती हैं जब इसे भेजा जाता है
systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:
जहाँ यह लेआउट के लिए आवश्यक चौड़ाई (724) पास है आवश्यक प्राथमिकता और 0 की ऊंचाई (दृश्य को संपीड़ित करने के लिए) की फिटिंग स्तर पर प्राथमिकता।
इससे iPad पर एक लंबा विजेट दृश्य दिखाई देता है, जहां से शुरू करने के लिए दृश्य व्यापक है।
लेकिन कोई वास्तविक पहलू-अनुपात बाधा नहीं है जिसे हटाया जा सकता है।
अनिवार्य रूप से, क्योंकि मैंने सभी बटन पर पहलू-अनुपात की बाधाओं को लागू किया है, आज के विस्तार की ऊंचाई इसकी चौड़ाई (सभी बाधाओं को एक साथ, पहलू-अनुपात और अन्यथा पर विचार करते हुए) पर निर्भर है।
इस प्रकार विस्तार की ऊंचाई एक विस्तृत क्षेत्र में अनजाने में होती है, जो iPad जैसे विस्तृत उपकरण पर खुद को प्रकट करता है।
बटन पर बाधाओं पर पुनर्विचार या किसी तरह समायोजित करने की आवश्यकता है।
नमूना परियोजना:
एक
नमूना परियोजना जो इस मुद्दे
को
प्रदर्शित करती
है, CloudApp से उपलब्ध है ताकि आप इसे डाउनलोड कर सकें और इसके साथ खेल सकें।
मैंने क्या कोशिश की है:
मैंने
widgetMarginInsetsForProposedMarginInsets
को ओवरराइड
widgetMarginInsetsForProposedMarginInsets
और नीचे के लिए
0
widgetMarginInsetsForProposedMarginInsets
डिफ़ॉल्ट मार्जिन
widgetMarginInsetsForProposedMarginInsets
को हटाने की कोशिश की।
इसने डिफ़ॉल्ट पैडिंग को हटा दिया, इसलिए ऊंचाई थोड़ी कम हो गई, लेकिन इसके नीचे अभी भी बहुत सारे अतिरिक्त स्थान हैं।
UILabel
ने इस पर एक बाधा
UILabel
थी: लेबल पर्यवेक्षण के अग्रणी के बराबर है - निरंतर 0, प्राथमिकता 1000, गुणक 1. यदि मैं बस इसे बदल देता हूं, तो पर्यवेक्षक के अग्रणी
मार्जिन पर
, अतिरिक्त निचला स्थान जादुई रूप से गायब हो जाता है।
मुझे आश्चर्य हुआ कि क्या ऐसा इसलिए था क्योंकि तत्व बहुत बड़े होते जा रहे थे, इसलिए बाईं रिक्ति की मात्रा बढ़ने से उनका आकार कम हो जाएगा, लेकिन मैंने इसे नियमित अग्रणी पर सेट करने और स्थिर को बढ़ाने की कोशिश की और इस मुद्दे को हल नहीं किया।
लेकिन यह केवल पोर्ट्रेट में आईपैड के लिए समस्या का समाधान करता है।
और यह पूरी तरह से इसे हल भी नहीं करता है, हर बार जब आप अधिसूचना केंद्र को खींचते हैं तो यह बड़ी ऊंचाई पर शुरू होता है और फिर उचित आकार तक सिकुड़ जाता है।
लैंडस्केप में यह उचित आकार में सिकुड़ता नहीं है।
प्रयास किए गए समाधान:
- @ लेटरिस ने आकार को हार्डकोड करने का प्रस्ताव दिया, जो इस मामले में काम नहीं करेगा क्योंकि ऊंचाई गतिशील है और विजेट कई स्क्रीन आकारों / झुकावों के लिए उपलब्ध है।
- @ युयुत्सु ने इसे हल करने का प्रयास किया, लेकिन यह दुर्भाग्य से आवश्यकताओं को पूरा नहीं करता है और परस्पर विरोधी बाधाओं और एक संशोधित लेआउट को प्रदर्शित करता है।