【发布时间】:2014-08-23 04:46:48
【问题描述】:
我正在将当前控制器的视图添加到容器视图中。第一个视图的矩形是原始设计矩形(320x568),然后更改为容器视图框架(320x386)。检查控制器的自动布局,并且 xib 包含视图垂直中心的按钮(IB 中视图垂直中心的蓝色虚线水平线)。但是在更改视图高度(386 而不是 568)后,按钮不在新的中心。
如何强制 ios 应用约束?
更换控制器:
- (void)switchToSection: (NSInteger)selectedIndex {
[self.indexLabel setText: [[NSString alloc] initWithFormat:@"selected segment #%d", selectedIndex]];
[self.indexLabel sizeToFit];
self.indexLabel.center = CGPointMake(self.view.center.x, self.indexLabel.center.y);
UIViewController *oldViewController =
_currentSelectedIndex != UISegmentedControlNoSegment
? self.controllers[_currentSelectedIndex]
: NULL;
UIViewController *newViewController = self.controllers[selectedIndex];
_currentSelectedIndex = selectedIndex;
if (oldViewController != NULL)
[self finishTransitionToOldViewController:oldViewController];
[self willTransitionToViewController:newViewController]; // settings view.height = container.height
[self.containerView addSubview:newViewController.view];
[self didTransitionToViewController:newViewController];
}
通过控制器创建视图:
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect viewRect = self.view.frame; // created originally viewRect CGRect origin=(x=0, y=0) size=(width=320, height=568)
}
将容器的矩形应用到子视图:
- (void)willTransitionToViewController:(UIViewController *)viewController
{
CGRect childRect = self.containerView.bounds;
viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
viewController.view.frame = childRect; // expect iOS to apply constraints
[viewController.view setNeedsUpdateConstraints]; // no luck
[viewController.view layoutIfNeeded]; // no luck
}
【问题讨论】:
-
你试过
[self.view layoutIfNeeded]吗? -
[viewController.view setNeedsUpdateConstraints]? -
没有
[viewController.view layoutIfNeeded] -
不幸的是,没有运气。我在
viewController.view.autoresizingMask之后尝试了layoutIfNeeded和setNeedsUpdateConstraints。我在设置矩形的地方添加了 cmets -
使用 cmets 更新代码
标签: ios autolayout