我刚开始学习 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/