这件事一直困扰着我。
基本上,当我使用布局锚手动定义autolayout约束,并在弹出器中使用视图控制器时,中心位于错误的位置。它似乎围绕着从弹出箭头的左边到左边和右边边缘的边界,这不是弹射区域的中心。
这似乎与其他UIViewController表示方法(如UIModalPresentationFormSheet)工作得很好。
有什么想法吗?我怎样才能以一种对布局友好的方式解决这个问题,而不需要特殊的边框?
PS。如果将布局固定在父视图的中心,则会发生完全相同的情况。
-(void)loadView {
UIView *view = [[UIView alloc] init];
[![enter image description here][1]][1] [view setBackgroundColor:[UIColor greenColor]]; [view setTranslatesAutoresizingMaskIntoConstraints:NO]; self.view = view;
UIView *parentView = [[UIView alloc] init];
[parentView setTranslatesAutoresizingMaskIntoConstraints:NO];
[parentView setBackgroundColor:[self colorForTag:i]];
[self.view addSubview:parentView];
// constrain parent view.
[parentView.topAnchor constraintEqualToAnchor:self.view.topAnchor constant:10.0].active = YES;
[parentView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor constant:-10.0].active = YES;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到在弹出视图控制器时自动布局约束不按预期工作的问题,通常是因为弹出视图的呈现方式或容器视图的约束设置未正确处理。针对您的情况,这里有几个建议来解决中心定位问题:
检查弹出器的约束和属性: 确保弹出视图控制器的modalPresentationStyle
被正确设置。如果使用自定义弹出器,请检查其内容视图的约束是否正确地将子视图居中。可能需要手动调整弹出视图的约束以确保它相对于父视图正确居中。
使用居中约束: 虽然您提到直接将视图固定在父视图中心也出现问题,但请确保您是这样设置居中约束的:
[parentView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES;
[parentView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = YES;
这应该使parentView
在其父视图中完全居中。
考虑弹出视图的尺寸: 弹出视图的尺寸可能影响其在屏幕上的位置。确认视图大小与期望的一致,并且没有其他约束冲突导致位置偏移。
检查弹出视图控制器的presentingViewController设置: 确保调用presentViewController:animated:completion:
方法的视图控制器正确无误,因为这会影响弹出视图的上下文和布局。
自定义弹出视图容器: 如果上述方法都无法解决问题,您可以创建一个自定义的UIViewControllerAnimatedTransitioning
和UIViewControllerTransitioningDelegate
来完全控制弹出视图的动画和布局过程。通过这种方式,您可以精确控制视图如何以及在哪里出现。
调试视图层次和约束: 使用Xcode的“视图调试器”工具查看运行时的视图层次结构和约束,这有助于识别任何可能导致布局异常的约束冲突或错误配置。
避免硬编码值: 尽量不要在约束中使用硬编码的常数值(除非绝对必要),而是利用相对约束来保持界面的灵活性和适应性。
希望这些建议能帮助您找到并解决布局问题。如果问题依旧存在,可能需要更详细的代码审查或了解弹出器的具体实现细节。