我利用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;
}