IOS

2015-12-08 17 views
5

UIStackView में UIStackView में वजन कैसे सेट करें Android LinearLayout के समान है लेकिन मैं यह नहीं समझ पाया कि सबव्यू के लिए वजन कैसे सेट करें।IOS

मान लीजिए कि मेरे पास लंबवत UIStackView और 3 UIImageView एस है। मैं UIImageView एस के लिए वजन 3, 6, 1 लगातार सेट करना चाहता हूं। मैं उसको कैसे करू?

layout diagram

उत्तर

7

UIStackView वजन के इसी अवधारणा नहीं है। यह एक सबव्यू के intrinsicContentSize को वजन के रूप में उपयोग कर सकता है, लेकिन एक विशिष्ट intrinsicContentSize को सेट करने के लिए आम तौर पर उप-वर्ग बनाने की आवश्यकता होती है और यह अन्य स्थितियों में भी उपयोग की जाती है (android:layout_weight विशेषता के विपरीत जो आप परिचित हैं, जिसका उपयोग केवल LinearLayout द्वारा किया जाता है)।

लेकिन UIStackView इसके व्यवस्थित सबव्यूज़ में बाधाओं को लागू करके काम करता है, तो आप सबव्यूज़ की ऊंचाइयों के बीच अतिरिक्त बाधाओं को सेट करके वजन का प्रभाव प्राप्त कर सकते हैं। (UIStackView आपको इस तरह के लेआउट को ट्विक करने के लिए अपनी बाधाओं को जोड़ने के लिए डिज़ाइन किया गया है।)

अपने मामले में, आप नीचे के दृश्य की 3 गुणा ऊंचाई के शीर्ष दृश्य की ऊंचाई को बाधित करना चाहते हैं, और आप नीचे के दृश्य की ऊंचाई 6 गुना होने के लिए मध्य दृश्य की ऊंचाई को बाधित करना चाहते हैं।

आप एक स्टोरीबोर्ड में एक समान चौड़ाई की बाधा बनाकर एक अनुपात में ऊंचाई की बाधा स्थापित कर सकते हैं, फिर बाधा के गुणक को संपादित कर सकते हैं। बंद

NSLayoutConstraint.activateConstraints([ 
    top.heightAnchor.constraintEqualToAnchor(bottom.heightAnchor, multiplier: 3), 
    middle.heightAnchor.constraintEqualToAnchor(bottom.heightAnchor, multiplier: 6), 
]) 
+0

"UIStackView में वजन की अवधारणा नहीं है" असल में, हाँ यह करता है। लेकिन वजन व्यवस्थित दृश्य की अंतर्निहित गुणवत्ता है। – matt

+0

क्या हम ['वितरण'] (https://developer.apple.com/documentation/uikit/uistackviewdistribution) स्टैकव्यू की संपत्ति [' fillProportionally'] (https://developer.apple.com/documentation/ पर सेट नहीं कर सकते) uikit/uistackviewdistribution/1616217-fillproportionally) –

+0

यदि आप 'fillProportionally' का उपयोग करते हैं, तो आपको अपने इच्छित वजन में प्रत्येक दृश्य के 'आंतरिक सामग्री' को सेट करना होगा। चूंकि 'intrinsicContentSize' एक' रीडोनली 'प्रॉपर्टी है, जिसका अर्थ है' अंतर्निहित सामग्री 'को ओवरराइड करने के लिए' UIView' उप-वर्ग बनाना। यदि आप बाधाओं का उपयोग करते हैं, तो आपको उप-वर्ग बनाने की आवश्यकता नहीं है। –

1

सबसे पहले, आप वास्तव में इस के लिए एक स्टेक दृश्य की जरूरत है:

कोड में, आप इस तरह यह कर सकता है (आईओएस 9.0 पर या बाद में)? आनुपातिक ऊंचाई बाधाओं का उपयोग करके इसे आसानी से व्यवस्थित करना बहुत आसान होगा।

हालांकि, आप कर सकते हैं यदि आप वास्तव में एक स्टैक व्यू का उपयोग करना चाहते हैं तो स्टैक व्यू के साथ ऐसा करें। रहस्य यह है कि प्रश्न में "वजन" बस व्यवस्थित दृश्य intrinsicContentSize().height है।

enter image description here

उन, प्रदर्शन के प्रयोजनों के लिए, हैं एक ही छवि दोहराया तीन बार: यह जानने के बाद, मैं आसानी से एक ढेर अनुपात में तीन छवि विचारों से मिलकर दृश्य आप अनुरोध की स्थापना करने में सक्षम था : 3x ऊंचाई पर, 6x ऊंचाई पर एक, और 1x ऊंचाई पर एक।

मैंने यह कैसे किया? मैंने स्टोरीबोर्ड में क्रमशः 300, 600 और 100 के तीन छवि दृश्य tag मान दिए। (। बेशक मैं इस के लिए एक IBInspectable कस्टम गुण का इस्तेमाल किया हो तथा वास्तविक जीवन में, मैं ऐसा होता है) तो फिर मैं उन्हें अपने UIImageView उपवर्ग, MyImageView, जिसका कोड के सभी उदाहरणों बनाया इस तरह दिखता है:

class MyImageView: UIImageView { 
    override func intrinsicContentSize() -> CGSize { 
     print(self.tag) 
     return CGSizeMake(CGFloat(self.tag), CGFloat(self.tag)) 
    } 
} 

स्टैक व्यू का वितरण आनुपातिक रूप से भरने के रूप में कॉन्फ़िगर किया गया है। छवि दृश्य उनके सामग्री मोड के साथ स्केल टू फिल के रूप में कॉन्फ़िगर किए गए हैं। परिणाम: स्टैक व्यू, अपने व्यवस्थित विचारों को बिछाने में, intrinsicContentSize विधि का समर्थन करता है, और इस प्रकार सही काम करता है।

+0

मैं ** केवल ** बाधाओं का उपयोग करने का सुझाव नहीं दे रहा था। मैं एक स्टैक व्यू का उपयोग करते समय बाधाओं को जोड़ने का सुझाव दे रहा था। मुझे लगता है कि 'intrinsicContentSize' को ओवरराइड करने के लिए उपclassing से सरल है। आईओएस और मैक ओएस एक्स दोनों पर स्टैक दृश्य स्पष्ट रूप से डिज़ाइन किए गए हैं ताकि आप लेआउट को ट्विक करने के लिए बाधाओं का उपयोग कर सकें। –

+0

@robmayoff मैं आपके साथ सहमत हूं कि वह _should_ क्या करता है। मैं बस दिखा रहा हूं कि उसने जो चीज निर्दिष्ट की है वह वास्तव में किया जा सकता है। – matt