子视图可见但框架在父视图框架之外
Subview visible but frame outside superview frame
我有一个 parent VC,它在里面加载了一个 child VC。 parentVC中的代码如下:
self.draggerViewController = [[DraggerViewController alloc] initWithSuperView:self.view];
而childVC的代码如下:
- (instancetype)initWithSuperView:(UIView*)superView {
self = [super init];
if (self) {
self.superView = superView;
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
[superView addSubview:self.view];
[superView addConstraint:[NSLayoutConstraint constraintWithItem:superView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:0]];
[superView addConstraint:[NSLayoutConstraint constraintWithItem:superView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]];
self.constraintDraggerAttributeBottom = [NSLayoutConstraint constraintWithItem:superView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0];
[superView addConstraint:self.constraintDraggerAttributeBottom];
}
return self;
}
使用此代码,子视图在其 parent 视图中可见,并且正确应用了约束,因此它位于 parent 视图的底部,前导和尾随均为 0。但是, 视图的真实框架在 parent 视图之外。
也就是说,我可以看到 parent 视图底部的子视图,但是这个子视图的框架是 frame = (0 -315; 768 35).
如果我将 'clipToBounds' 设置为 'YES',视图将放置在实际框架上,但现在未正确应用约束。
如何使用约束将此 child VC 放置在 parent VC 视图中我想要的位置?
谢谢!
试试这个:
superView.insertSubview(self.view, at: self. superView.subviews.count)
好的,知道了...
我忘记了视图的高度限制...真可惜...
[superView addConstraint:[NSLayoutConstraint constraintWithItem:superView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1 constant:0]];
谢谢大家!
我有一个 parent VC,它在里面加载了一个 child VC。 parentVC中的代码如下:
self.draggerViewController = [[DraggerViewController alloc] initWithSuperView:self.view];
而childVC的代码如下:
- (instancetype)initWithSuperView:(UIView*)superView {
self = [super init];
if (self) {
self.superView = superView;
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
[superView addSubview:self.view];
[superView addConstraint:[NSLayoutConstraint constraintWithItem:superView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:0]];
[superView addConstraint:[NSLayoutConstraint constraintWithItem:superView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]];
self.constraintDraggerAttributeBottom = [NSLayoutConstraint constraintWithItem:superView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0];
[superView addConstraint:self.constraintDraggerAttributeBottom];
}
return self;
}
使用此代码,子视图在其 parent 视图中可见,并且正确应用了约束,因此它位于 parent 视图的底部,前导和尾随均为 0。但是, 视图的真实框架在 parent 视图之外。
也就是说,我可以看到 parent 视图底部的子视图,但是这个子视图的框架是 frame = (0 -315; 768 35).
如果我将 'clipToBounds' 设置为 'YES',视图将放置在实际框架上,但现在未正确应用约束。
如何使用约束将此 child VC 放置在 parent VC 视图中我想要的位置?
谢谢!
试试这个:
superView.insertSubview(self.view, at: self. superView.subviews.count)
好的,知道了...
我忘记了视图的高度限制...真可惜...
[superView addConstraint:[NSLayoutConstraint constraintWithItem:superView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1 constant:0]];
谢谢大家!