【发布时间】:2020-03-29 22:08:34
【问题描述】:
这一直困扰着我。
基本上,归结为,当我使用布局锚手动定义自动布局约束并在弹出框中使用视图控制器时,中心位于错误的位置。它似乎以从弹出框弹出箭头左侧到左右边缘的边界为中心,而不是弹出框区域的中心。
这似乎适用于其他 UIViewController 表示方法,例如 UIModalPresentationFormSheet。
有什么想法可以在不特殊设置边距的情况下以布局友好的方式解决这个问题吗?
PS。如果您将布局固定到父视图的中心,则会发生完全相同的事情,它会稍微偏离。
(注:编辑因为我发布的来源不好)
-(void)loadView {
// create root view.
UIView *view = [[UIView alloc] init];
[view setBackgroundColor:[UIColor greenColor]];
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
self.view = view;
UIView *parentView = [[UIView alloc] init];
[view addSubview:parentView];
[parentView setTranslatesAutoresizingMaskIntoConstraints:NO];
[parentView setBackgroundColor:[UIColor redColor]];
[parentView.leadingAnchor constraintEqualToAnchor:view.leadingAnchor constant:20.0].active = YES;
[parentView.trailingAnchor constraintEqualToAnchor:view.trailingAnchor constant:-20.0].active = YES;
[parentView.topAnchor constraintEqualToAnchor:view.topAnchor constant:10.0].active = YES;
[parentView.bottomAnchor constraintEqualToAnchor:view.bottomAnchor constant:-10.0].active = YES;
}
【问题讨论】:
-
您的约束不足。这是真实的代码吗?
-
抱歉,剪切/粘贴工作失败。这些约束应该足够了,正如我所说,它适用于页面表或其他演示文稿,但不适用于弹出式演示文稿。
-
所以我想现在的问题只是视图的边缘在哪里。您假设它们是主要区域的边缘。但也许它们包括箭头。如果箭头只是一个有助于解释它的面具。
-
正确,它似乎居中,好像箭头是视图的一部分。我只是不确定如何干净地修复它,以某种方式可以将视图呈现为弹出框和模态叠加层,至少无需有条件地修改约束。
-
固定到视图的margins,而不是它的edge。这就是发明边距的原因。
标签: ios objective-c autolayout