iOS
आकार कक्षाएं और अनुकूलन
खोज…
टिप्पणियों
जैसा कि आप अनुकूली एप्लिकेशन का निर्माण करते हैं, आकार वर्गों की सीमाओं को ध्यान में रखें: वे सामान्यीकरण हैं , सटीक पिक्सेल आकार या उपकरणों के लिए विशिष्ट मार्गदर्शिका नहीं। कभी भी यह निर्धारित करने का प्रयास न करें कि आपका ऐप किस डिवाइस पर चल रहा है, या यह आकार के वर्गों के आधार पर स्प्लिट-स्क्रीन मोड में है या नहीं।
इसके बजाय, आकार वर्ग पर उच्च-स्तरीय लेआउट निर्णय लें, और सटीक दृश्य फ़्रेम बदलने के लिए ऑटो लेआउट का उपयोग करें। (यह भी देखें कि UIViewController पद्धति को viewWillTransition(to:with:)
एक संक्रमण के बाद कितना बड़ा नियंत्रक का दृश्य होगा, इसकी अधिक सटीक अधिसूचना के लिए viewWillTransition(to:with:)
के viewWillTransition(to:with:)
।)
विशेषता संग्रह
एक iOS ऐप में, आपका उपयोगकर्ता इंटरफ़ेस कुछ अलग सामान्य आकार और आकारों में से एक पर ले जा सकता है। इन्हें आकार वर्गों का उपयोग करके परिभाषित किया गया है, जो एक दृश्य या दृश्य नियंत्रक के संग्रह के माध्यम से उपलब्ध हैं।
Apple दो आकार वर्गों को परिभाषित करता है: नियमित और कॉम्पैक्ट । इन आकार वर्गों में से प्रत्येक डिवाइस के दोनों अक्षों ( क्षैतिज और ऊर्ध्वाधर ) पर उपलब्ध हैं। आपका एप्लिकेशन जीवन भर इन चार राज्यों में मौजूद हो सकता है। शॉर्टहैंड के रूप में, डेवलपर्स अक्सर दो आकार वर्गों को कह या लिखकर एक आकार वर्ग संयोजन का वर्णन करते हैं, पहले क्षैतिज अक्ष के साथ: "कॉम्पैक्ट / नियमित" एक इंटरफ़ेस का वर्णन करता है जो क्षैतिज रूप से कॉम्पैक्ट है लेकिन लंबवत नियमित है।
अपने एप्लिकेशन में, अपने वर्तमान आकार वर्ग की जांच करने और परिवर्तनों पर प्रतिक्रिया देने के लिए UITraitEnvironment प्रोटोकॉल पर विधियों का उपयोग करें:
class MyViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("Horizontal size class: \(traitCollection.horizontalSizeClass)")
print("Vertical size class: \(traitCollection.verticalSizeClass)")
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
print("Trait collection changed; size classes may be different.")
}
}
UIView और UIViewController दोनों UITraitEnvironment के अनुरूप हैं, इसलिए आप अपने वर्तमान विशेषता संग्रह को देख सकते हैं और या तो उप-वर्ग में परिवर्तन को संभाल सकते हैं।
ट्रेट संग्रह परिवर्तन के साथ ऑटो लेआउट अपडेट करना
एक ऐप अनुकूली बना रहा है - वह है, अपने लेआउट को बदलकर आकार में परिवर्तन का जवाब देना - अक्सर ऑटो लेआउट सिस्टम से बहुत मदद मिलती है। प्राथमिक तरीकों में से एक ऐप अनुकूली हो जाता है, जब दृश्य के आकार के वर्ग में परिवर्तन होने पर सक्रिय ऑटो लेआउट बाधाओं को अद्यतन करके।
उदाहरण के लिए, एक ऐप पर विचार करें जो दो UILabels की व्यवस्था करने के लिए UIStackView का उपयोग करता है। हम चाहते हैं कि ये लेबल क्षैतिज रूप से कॉम्पैक्ट वातावरण में एक दूसरे के ऊपर स्टैक करें, लेकिन एक दूसरे के बगल में बैठें जब हमारे पास क्षैतिज नियमित वातावरण में थोड़ा अधिक कमरा हो।
class ViewController: UIViewController {
var stackView: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
stackView = UIStackView()
for text in ["foo", "bar"] {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = text
stackView.addArrangedSubview(label)
}
view.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
updateAxis(forTraitCollection: traitCollection)
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
updateAxis(forTraitCollection: traitCollection)
}
private func updateAxis(forTraitCollection traitCollection: UITraitCollection) {
switch traitCollection.horizontalSizeClass {
case .regular:
stackView.axis = .horizontal
case .compact:
stackView.axis = .vertical
case .unspecified:
print("Unspecified size class!")
stackView.axis = .horizontal
}
}
}
IPad पर iOS मल्टीटास्किंग का समर्थन
आधुनिक iOS ऐप में अनुकूलता का एक महत्वपूर्ण हिस्सा iPad पर मल्टीटास्किंग का समर्थन कर रहा है। डिफ़ॉल्ट रूप से, Xcode 7 और नए में बनाए गए एप्लिकेशन मल्टीटास्किंग का समर्थन करने के लिए कॉन्फ़िगर किए जाएंगे: उनके पास एक LaunchScreen.storyboard फ़ाइल होगी जो ऑटो लेआउट का उपयोग करती है।
मौजूदा ऐप्स के लिए मल्टीटास्किंग में चुनने का सबसे आसान तरीका है कि इस तरह की स्टोरीबोर्ड बनाई जाए, फिर इसे प्रोजेक्ट की लॉन्च स्क्रीन के रूप में सेट करें:
एक बार जब आपका ऐप iPad मल्टीटास्किंग का समर्थन करता है, तो यह सुनिश्चित करने के लिए कि वे ऑटो लेआउट का उपयोग करते हैं, यह सुनिश्चित करने के लिए मौजूदा विचारों और दृश्य नियंत्रकों का ऑडिट करें और विभिन्न प्रकार के आकार संयोजन का समर्थन कर सकते हैं।