我刚开始学习iOS的自动布局,并研究了视觉格式语言.

一切都很好,除了一件事:我就是不能让视图在其SuperView中居中.
使用VFL可以做到这一点吗?或者我需要自己手动创建约束吗?

推荐答案

目前,不能,看起来不可能使用onlyVFL在SuperView中居中显示.然而,使用单个VFL字符串和单个额外约束(每个轴)来实现这一点并不困难:

VFL:"|-(>=20)-[view]-(>=20)-|"

[NSLayoutConstraint constraintWithItem:view
                             attribute:NSLayoutAttributeCenterX
                             relatedBy:NSLayoutRelationEqual
                                toItem:view.superview
                             attribute:NSLayoutAttributeCenterX
                            multiplier:1.f constant:0.f];

人们会认为您可以简单地做到这一点(当我看到这个问题时,我最初也是这么想和try 的):

[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=20)-[view(==200)]-(>=20)-|"
                                 options: NSLayoutFormatAlignAllCenterX | NSLayoutFormatAlignAllCenterY
                                 metrics:nil
                                   views:@{@"view" : view}];

我try 了上面许多不同的变体,试图按照我的意愿改变它,但这似乎不适用于SuperView,即使在两个轴(H:|V:)都有两个单独的VFL字符串的情况下也是如此.然后,我开始try 准确地隔离选项do应用于VFL的时间.它们似乎not应用于VFL中的SuperView,并且将仅应用于VFL字符串中提到的任何显式视图(这在某些情况下令人失望).

我希望苹果在future 增加一些新的选项,让VFL选项考虑SuperView,即使只在VFL中除了SuperView之外只有一个明确的视图时才这样做.另一种解决方案可能是传递到VFL的另一个选项,其内容类似于:NSLayoutFormatOptionIncludeSuperview.

不用说,为了回答这个问题,我学到了很多关于VFL的知识.

Ios相关问答推荐

为什么Reaction-Native-Vision-Camera不能与闪光灯一起使用?

围绕对象旋转和移动相机不起作用Swift SceneKit

由于已存在同名项目,因此无法将Mapbox.xcframework-ios.sign复制到Signature中

如何在不将应用程序留在SwiftUI上的情况下更改语言?

swift|在具有自定义单元格的多个TableView中没有任何内容

Xcode 15模拟器用x86_64编译

Strange UIView.animate更改UIButton标题 colored颜色 的行为

NavigationLink 只能在文本部分点击

Swift:判断 Foundation (NS)Errors 与自定义协议的一致性

无法从 Xcode 获取模拟器列表.请打开 Xcode 并try 直接从那里运行项目以解决剩余问题

如何识别 SwiftUI 中点击的按钮 ID 以使该按钮动画化?

如何在通用应用程序中同时支持 iPad 和 iPhone 视网膜图形

如何在 UIActivityViewController 中设置邮件主题?

通过touch 传递到下面的 UIViews

在代码生成的 UIView 上绘制 UIBezierPath

从 NSData 或 UIImage 中查找图像类型

aps-environment 始终在发展

如何确定 WKWebView 的内容大小?

单击 GoogleSignIn 按钮时应用程序崩溃

在 iOS 7 中更改返回按钮会禁用滑动导航返回