[問題] nib建立的custom view與auto layout

作者: livingProj (活著計畫)   2015-03-04 02:01:57
我利用xib建立一個自訂的view物件
之後在storyboard上拖曳一個view進來,並指定custom class來建立自訂的view物件
執行之後物件確實建立了
但問題是尺寸不對
設定部份
因為xib裡面的view(container),size是設定為inferred
所以size inspector裏的x, y, width, height都是反白無法設定的
且顯示為(0, 0, 600, 600)
而我將自訂的view物件拉進storyboard以後
我設定了width & height的constraint(300, 200)
但執行以後,view的尺寸還是維持原先的600, 600
並沒有更新為我所設定的constraint
我在initWithCoder查看,發現self.bounds.size是正確的數值(300, 200)
但self.view.bounds.size卻是(600,600)
並沒有自己去設定為真正的尺寸
如果我多一行程式,將self.view的尺寸設定為self的尺寸
問題就解決了
但不知道有沒有其他的方式或是設定
我有試著要在xib裡面去設定作為container的view的constraint,但完全無法設定
另外還有一個問題,不知道是否與這有關
我看網路上很多教學說
要加一個設定
setTranslatesAutoresizingMaskIntoConstraints:NO
來避免與之前的autosizing產生衝突
但如果我加了這一行
所有的constraint就失效了,但也無法用直接指定的方式去更改frame
不知道這是怎麼一回事
附上自訂類別的.m檔
#import "MyHeader.h"
@interface MyHeader () {
CGSize _intrinsicContentSize;
}
@end
@implementation MyHeader
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self == nil) {
return nil;
}
[self setupView];
return self;
}
- (void)setupView {
NSString *nibName = NSStringFromClass(self.class);
UINib *nib = [UINib nibWithNibName:nibName bundle:nil];
[nib instantiateWithOwner:self options:nil];
// [self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
//加了上面這行,排版就會有錯誤
_intrinsicContentSize = self.bounds.size;
self.view.frame = CGRectMake(0, 0, _intrinsicContentSize.width,
_intrinsicContentSize.height);
[self addSubview:self.view];
}
- (CGSize)intrinsicContentSize {
return _intrinsicContentSize;
}
作者: yume190   2015-03-05 09:40:00
前陣子也在研就這個,fb yume190,歡迎找我討論

Links booklink

Contact Us: admin [ a t ] ucptt.com