ios - 使用可视格式语言将 View 置于其父 View 的中心

标签 ios layout autolayout visual-format-language

我刚开始学习 iOS 的 AutoLayout 并了解了 Visual Format Language。

一切正常,除了一件事:我无法让 View 在其父 View 中居中。
这对 VFL 是否可行,还是我需要自己手动创建约束?

最佳答案

目前,不,看起来不可能使用 VFL 将 View 置于父 View 的中心。然而,使用单个 VFL 字符串和单个额外约束(每个轴)并不难:

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

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

有人会认为你可以简单地做到这一点(这是我最初看到这个问题时的想法和尝试):

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

我尝试了上述的许多不同变体,试图让它按照我的意愿弯曲,但这似乎不适用于 super View ,即使在两个轴上明确具有两个单独的 VFL 字符串时也是如此 (H:|V:)。然后,我开始尝试准确地隔离选项何时执行应用于 VFL。它们似乎适用于 VFL 中的 super View ,并且只会适用于 VFL 字符串中提到的任何显式 View (在某些情况下令人失望)。

我希望在未来 Apple 添加某种新选项,让 VFL 选项考虑到 super View ,即使仅在 VFL 中除 super View 之外只有一个显式 View 时才这样做。另一种解决方案可能是将另一个选项传递给 VFL,它表示如下内容:NSLayoutFormatOptionIncludeSuperview

不用说,我在尝试回答这个问题时学到了很多关于 VFL 的知识。

关于ios - 使用可视格式语言将 View 置于其父 View 的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873372/

相关文章:

ios - 如何在 iOS Swift4 中滚动时增加/减小 UILabel 字体大小以及宽度和高度

php - 检测用户是否正在使用 iDevice

ios - Swift - tableView 行高仅在滚动或切换展开/折叠后更新

ios - 根据 URLRequest dataTask 中的标识符打开 View Controller 时构建失败

html - 如何在 tile 中 float 不同大小的元素

android - 为什么我不能将右对齐的 TextView 放入 TableView 中?

css - 将自定义 css 添加到自定义模块

ios - 使用自动布局删除 View 并重新排列其余部分

iOS 9 自动布局对齐矩形问题

Swift 自动布局,为容器 View 设置约束