UIStackViewआंतरिक रूप से अपने व्यवस्थित साक्षात्कारों की स्थिति के लिए बाधाओं का उपयोग करता है। वास्तव में क्या अड़चनें पैदा होती हैं, यह इस बात पर निर्भर करता है कि स्टैक दृश्य कैसे कॉन्फ़िगर किया गया है। डिफ़ॉल्ट रूप से, एक स्टैक दृश्य बाधाओं को बनाएगा जो क्षैतिज रेखा में अपने व्यवस्थित साक्षात्कारों को बाहर निकालते हैं, जिससे अग्रणी और अनुगामी दृश्य अपने स्वयं के अग्रणी और अनुगामी किनारों को पिन करते हैं। तो आपका कोड इस तरह दिखने वाला एक लेआउट तैयार करेगा:
|[view1][view2]|
प्रत्येक सबव्यू के लिए आवंटित किया गया स्थान सबव्यू के आंतरिक सामग्री आकार सहित कई कारकों द्वारा निर्धारित किया जाता है और यह संपीड़न प्रतिरोध और प्राथमिकताओं को गले लगाने वाली सामग्री है। डिफ़ॉल्ट रूप से, UIViewउदाहरण एक आंतरिक सामग्री आकार को परिभाषित नहीं करते हैं। यह एक ऐसी चीज है जो आम तौर पर एक उपवर्ग द्वारा प्रदान की जाती है, जैसे UILabelया UIButton।
चूंकि दो नए UIViewउदाहरणों की सामग्री संपीड़न प्रतिरोध और सामग्री गले लगाने की प्राथमिकताएं समान होंगी, और न ही दृश्य एक आंतरिक सामग्री आकार प्रदान करता है, इसलिए लेआउट इंजन को अपना सर्वश्रेष्ठ अनुमान लगाना चाहिए कि प्रत्येक दृश्य को किस आकार को आवंटित किया जाना चाहिए। आपके मामले में, यह उपलब्ध स्थान का पहला दृश्य 100% और दूसरा दृश्य कुछ भी नहीं बता रहा है।
यदि आप UILabelइसके बजाय इंस्टेंस का उपयोग करने के लिए अपने कोड को संशोधित करते हैं , तो आपको बेहतर परिणाम मिलेंगे:
UILabel *label1 = [UILabel new];
label1.text = @"Label 1";
label1.backgroundColor = [UIColor blueColor];
UILabel *label2 = [UILabel new];
label2.text = @"Label 2";
label2.backgroundColor = [UIColor greenColor];
[self.stack1 addArrangedSubview:label1];
[self.stack1 addArrangedSubview:label2];
ध्यान दें कि किसी भी बाधा को स्वयं बनाने के लिए आवश्यक नहीं है। यह उपयोग करने का मुख्य लाभ है UIStackView- यह डेवलपर से बाधा प्रबंधन के (अक्सर बदसूरत) विवरण को छुपाता है।