2015-10-26 10 views
8

मैं निम्नलिखित विन्यास के साथ UIStackView उपयोग कर रहा हूँ:UIStackView की अपनी intrinsicContentSize

let contentView = UIStackView() 
contentView.distribution = .EqualSpacing 
contentView.alignment = .Center 
contentView.spacing = horizontalSpacing 

तत्वों में से प्रत्येक का अपना है intrinsicContentSize तो यह UIStackView अपनी ही intrinsicContentSize प्रदान करने के लिए संभव हो जाना चाहिए है। दस्तावेज़ीकरण में कहा गया है कि spacing न्यूनतम दूरी के रूप में उपयोग किया जाता है।

उदाहरण:

view1: width=10 
view2: width=15 
spacing = 5 
[view1(10)]-5-[view2(15)] 

stackView की intrinsicContentSize.width30 होना चाहिए।

इसके बजाय मैं:

▿ CGSize 
- width : -1.0 
- height : -1.0 { ... } 

जो मुझसे कहता है कि intrinsicContentSize प्रदान नहीं किया जा सकता है।

क्या आप में से कोई भी जानता है कि क्या मैं कुछ गलत कर रहा हूं, अगर व्यवहार का इरादा है या यह एक बग है?

उत्तर

10

आईओएस 9.1 के रूप में, UIStackViewintrinsicContentSize को लागू नहीं करता है:

import UIKit 
import ObjectiveC 

let stackViewMethod = class_getInstanceMethod(UIStackView.self, "intrinsicContentSize") 
let viewMethod = class_getInstanceMethod(UIView.self, "intrinsicContentSize") 
print(stackViewMethod == viewMethod) 

आउटपुट:

true 

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

+0

कल्पना कीजिए कि मेरे पास स्टैकव्यू के अंदर मेरी सारी चीज़ें हैं और मैं इस स्टैकव्यू को अपने सुपर व्यू में जोड़ता हूं। लेकिन मेरे पास अभी भी एक और दृश्य है (वास्तव में मेरे पास दृश्य नियंत्रक का दृश्य है) मेरे सुपरव्यू में। इन दोनों को एक-दूसरे के खिलाफ कैसे बाधा डालेंगी ताकि स्टैकव्यू सिर्फ अपने आंतरिक आकार को ले ले और शेष को बच्चे के लिए छोड़ दें? – Honey

+0

लगता है जैसे आपको अपना खुद का शीर्ष-स्तरीय प्रश्न पोस्ट करने की आवश्यकता है। –

+0

आप सही हैं। मैं बस एक मोटा विचार पाने की कोशिश कर रहा हूँ। एक 2 लाइन प्रतिक्रिया की तरह। इसके अलावा मैंने एक प्रश्न पोस्ट नहीं किया क्योंकि यह मेरी प्लानबी है ... मेरी योजना ए मुझे असफल कर रही है, लेकिन मेरी सभी कोडिंग बैंडविड्थ भी ले रही है, इसलिए मैं सिर्फ इतना करना चाहता हूं कि क्या करने की जरूरत है। क्या आप मुझे 2 लाइन प्रतिक्रिया दे सकते हैं? :/कुछ भी आगे मैं एक प्रश्न पूछूंगा – Honey

0

आपके द्वारा बनाए गए UIViews में शून्य की आंतरिक ऊंचाई और चौड़ाई है। अंतर्निहित UIViews के बजाय autolayout बाधाओं का उपयोग करने का प्रयास करें।

आप UIStackView को आकार देने के लिए ऑटोलायआउट का भी उपयोग कर सकते हैं, यदि आप यह उपयोग केंद्र में संरेखण सेट नहीं करते हैं, तो आपको इसके बजाय भरना चाहिए।

उदाहरण:

@property (nonatomic, strong) UIStackView *firstStackView; 

@property (nonatomic, strong) UIView *redView; 
@property (nonatomic, strong) UIView *blueView; 
@property (nonatomic, strong) UIView *yellowView; 
@property (nonatomic, strong) UIView *greenView; 

@property (nonatomic, strong) NSArray *subViews; 

self.redView = [[UIView alloc] init]; 
self.redView.backgroundColor = [UIColor redColor]; 
self.blueView = [[UIView alloc] init]; 
self.blueView.backgroundColor = [UIColor blueColor]; 
self.yellowView = [[UIView alloc] init]; 
self.yellowView.backgroundColor = [UIColor yellowColor]; 
self.greenView = [[UIView alloc] init]; 
self.greenView.backgroundColor = [UIColor blackColor]; 
self.subViews = @[self.greenView,self.yellowView,self.redView,self.blueView]; 

self.firstStackView = [[UIStackView alloc] initWithArrangedSubviews:self.subViews]; 
self.firstStackView.translatesAutoresizingMaskIntoConstraints = NO; 
self.firstStackView.distribution = UIStackViewDistributionFillEqually; 
self.firstStackView.axis = UILayoutConstraintAxisHorizontal; 
self.firstStackView.alignment = UIStackViewAlignmentFill; 

[self.firstStackView.heightAnchor constraintEqualToConstant:40].active = YES; 
[self.firstStackView.widthAnchor constraintEqualToConstant:500].active = YES; 

इसका कारण यह है stackview अब एक ऊंचाई और चौड़ाई कार्य करता रहेगा।

+0

'stackViewForCell' चर कहां से आता है? – simonseyer

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