2015-01-12 11 views
12

मैंने एक अलग .xib बनाया क्योंकि मैं को autolayout के साथ व्यू कंट्रोलर के बाहर डिज़ाइन करना चाहता था। मैंने .xib बनाया, UIView और wCompact hRegular का उपयोग करके बाधाओं को जोड़ा। सरल।UIView हमेशा 600x600

enter image description here

तब मेरे viewDidLoad में viewController में जोड़ें:

UIView *header = [[[NSBundle mainBundle] loadNibNamed:@"HeaderSearch" owner:self options:nil] lastObject]; 
NSLog(@"%@", NSStringFromCGRect(header.frame)); 
[self.view addSubview:header]; 

लेकिन, जब यह जोड़ा जाता है, फ्रेम आकार 600x600 है और मैं बाहर क्यों समझ नहीं सकता।

मैंने यहां क्या गलत किया है जो इस अजीब आकार को मजबूर कर रहा है?

+0

आप किस फ्रेम आकार की उम्मीद करते हैं? – gabbler

+0

क्या आप शायद अपनी ऊंचाई और चौड़ाई को बाधा के साथ पिन कर सकते हैं? मुझे लगता है कि स्क्रीनशॉट सही फ्रेम आकार दिखाता है? –

+0

@ गब्बलर - मैं पर्यवेक्षण की चौड़ाई से 130 लंबा होने की उम्मीद कर रहा था, लेकिन मुझे यकीन नहीं है कि मैं इसे एक अलग xib के साथ कर सकता हूं ... –

उत्तर

9

आप अपने xib में 'का प्रयोग करें आकार वर्गों' को अनचेक करने की जरूरत है

uncheck size classes

और देखने फ्रेम आकार सेट करने में और नहीं 600x600

+0

लेकिन यह मुद्दा क्यों मौजूद है? मैं भी पागल हो रहा था! यदि मैंने आकार कक्षाओं का उपयोग किया है तो मुझे आकार वर्गों के अनुसार दृश्य सेट करने में सक्षम होना चाहिए। क्या इसका कोई कारण है? – Developer

+1

और विभिन्न iPhones के मामले में दृश्य की ऊंचाई कैसे प्रबंधित की जाएगी? – Developer

+1

और यदि मैं आकार कक्षाओं का उपयोग करना चाहता हूं ?! –

2

कृपया इसका संदर्भ लें।

header.translatesAutoresizingMaskIntoConstraints = NO; 
[self.view addSubview:header]; 

NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:header attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]; 
[self.view addConstraint:widthConstraint]; 

NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:header attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:130.0]; 
[self.view addConstraint:widthConstraint]; 
[self.view addConstraint:heightConstraint]; 
1

हो जाएगा अगर यह Xcode है 8 "ट्राइट वेरिएशन का उपयोग करें" अक्षम करें

enter image description here

+4

लेकिन फिर मैं "आईपैड संभावनाओं के रूप में देखें" खो देता हूं; क्या यह सुनिश्चित करने का तरीका है? – swalkner

0

मुझे एक ही समस्या थी लेकिन मेरे मामले में मैं विशेषता भिन्नताओं या आकार वर्गों को बंद करना पसंद नहीं करता था। मैं भी XIBs से कुछ दृश्यों लोड हो रहा है, लेकिन मैं इस आसान सहायक श्रेणी का उपयोग करें:

:

@implementation UIView (Initialization) 

+ (instancetype)instantiateFromNib { 
    return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:nil options:nil] firstObject]; 
} 

@end 

मैं एक कोड में लिखा की कमी तो निम्नलिखित की तरह मेरे विचार नियंत्रक करने के लिए एक ओवरराइड viewWillLayoutSubviews विधि जोड़ा लागू करने के लिए नहीं करना चाहता था

- (void)viewWillLayoutSubviews { 
    [super viewWillLayoutSubviews]; 
    [self.firstView setFrame:self.view.bounds]; 
    [self.secondView setFrame:self.view.bounds]; 
} 

मेरे मामले में firstView और secondView पूरे दृश्य नियंत्रक के लिए सिर्फ एक ओवरले हैं।