Re: [问题] nib建立的custom view与auto layout

楼主: livingProj (活着计画)   2015-03-06 13:46:40
自问自答
如果遇到相同问题的人可以参考这篇,这篇是原因
http://ppt.cc/JTOM
Constraints relate two views. In a view NIB, the superview isn't present, so
there's nothing for the constraints to relate to.
Furthermore, the constraints would have to be added to the superview, not to
the view in the NIB.
Lastly, one important use case for a view NIB is for views which may be
used in various contexts.
It is not appropriate for the view to dictate how it will relate to its
environs in arbitrary contexts.
That's a job for the controller which loads it and adds it into a another
view hierarchy.
这是一个解法
http://ppt.cc/3Vmt
Dragging in a UIView from the Object Library produces a Static view.
and
Static view: the default views which do not allow top level constraints, and
have translatesAutoresizingMaskIntoConstraints set to YES.
所以解法就是设定constrainable view
可以新增也可以转换现有的view
※ 引述《livingProj (活着计画)》之铭言:
: 我利用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;
: }

Links booklink

Contact Us: admin [ a t ] ucptt.com