7

का उपयोग कर समान रूप से @"|-[a(5)]-[b(8)]-[c(5)]-|" में b के लिए छोड़ दिया और सही जगह वितरित करने के लिए यह संभव है दृश्य प्रारूप तार का उपयोग कर रिक्ति वितरित?समान रूप से ऑटो लेआउट दृश्य प्रारूप स्ट्रिंग

+0

इस सवाल से संबंधित बहुत अच्छा लेख [यहां] (http://stackoverflow.com/questions/13075415/evenly-space-multiple-views-within-a-container-view/25898949#25898949) –

उत्तर

13

सं

हालांकि, अगर आप यह दृश्य स्वरूप और एक मैनुअल बाधा निर्माण के साथ कर सकते हैं। करने के लिए अपने VFL स्ट्रिंग बदलें:

@"|-[a(5)]->=0-[b(8)]->=0-[c(5)]-|" 

यह कहता है कि आप ए और बी, और बी और सी के बीच रिक्त स्थान का वास्तविक आकार के बारे में भी चिंतित नहीं हैं।

अब, constraintWithItem:... का उपयोग कर पर्यवेक्षण के केंद्र में बी के केंद्र को पिन करने के लिए एक बाधा उत्पन्न करें (मैं इसे फोन पर टाइप कर रहा हूं इसलिए मुझे पूरी विधि को वर्तनी न करने के लिए क्षमा करें)।

यह आपके लचीला रिक्ति के साथ मिलकर, यहां तक ​​कि छोड़ दिया और ख के अधिकार के लिए रिक्त स्थान दे देंगे।

+0

यह ध्वनियां महान। मैं इसे एक शॉट दूँगा। धन्यवाद! – flohei

+0

बस महान काम करता है। बहुत आसन। धन्यवाद! :-) – flohei

+0

आपने "पर्यवेक्षण के केंद्र में बी के केंद्र को पिन कैसे किया", @flohei? और इसके लिए दृश्य प्रारूप का उपयोग करना भी संभव नहीं है या किसी को 'बाधा का उपयोग करना चाहिए': विशेषता: संबंधित: toItem: विशेषता: गुणक: निरंतर: '? –

15

एप्पल के Auto Layout Guide "स्पेसर दृश्य" का उपयोग कर पता चलता है। यहाँ बराबर रिक्ति क्षैतिज के साथ अपने तीन दृश्य बिछाने के लिए समाधान है:

// create views dictionary 
NSMutableDictionary *viewsDictionary = [NSMutableDictionary dictionary]; 
[viewsDictionary addEntriesFromDictionary:NSDictionaryOfVariableBindings(viewA, viewB, viewC)]; 

// create 4 spacer views 
for (int i = 0; i < 4; i++) { 
    UIView *spacerView = [[UIView alloc] init]; 
    spacerView.hidden = YES; 
    [self addSubview:spacerView]; 
    [viewsDictionary setObject:spacerView 
         forKey:[NSString stringWithFormat:@"spacer%d", i + 1]]; 
} 

// disable translatesAutoresizingMaskIntoConstraints in views for auto layout 
[viewsDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) 
{ 
    [obj setTranslatesAutoresizingMaskIntoConstraints:NO]; 
}]; 

// add constraints 
[superview addConstraints: 
[NSLayoutConstraint constraintsWithVisualFormat: 
    @"|[spacer1(>=0)][viewA][spacer2(==spacer1)][viewB][spacer3(==spacer1)][viewC][spacer4(==spacer1)]|" 
             options:kNilOptions 
             metrics:nil 
              views:viewsDictionary]]; 

ध्यान दें कि spacer1 की चौड़ाई से अधिक 0. बाद स्पेसर विचारों spacer1 साथ बराबर चौड़ाई के लिए सेट कर रहे हैं होने के लिए निर्धारित है।

+0

तो ऐसा कोई कारण तो आप बस नहीं लिखा था है 'NSDictionary * दृश्य = NSDictionaryOfVariableBindings (viewA, viewB, viewC);'? –

+0

मैंने NSDictionaryOfVariable बाइंडिंग में एकाधिक तर्कों का उपयोग करने के लिए अपना उत्तर संपादित कर दिया है। मैं एक परिवर्तनीय शब्दकोश का उपयोग कर रहा हूं ताकि मैं गतिशील रूप से अपने स्पेसर दृश्य जोड़ सकूं। –

+0

ओह, ठीक है।^___^'एनएसएमयूटेबल डिक्शनरी * विचार = NSDictionaryOfVariable बाइंडिंग्स (व्यूए, व्यूबी, व्यूसी) .mutableCopy; 'तब। –

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