我刚刚开始学习 iOS 的 AutoLayout,并了解了 Visual Format Language。
除了一件事之外,一切都工作正常:我只是无法让视图在其超级视图中居中。
这对于 VFL 是否可行,还是我需要自己手动创建约束?
目前,不,看起来不可能使用以下命令将视图置于超级视图的中心onlyVFL。然而,使用单个 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}];
我尝试了上述方法的许多不同变体,试图将其弯曲到我的意愿,但这似乎不适用于超级视图,即使两个轴明确有两个单独的 VFL 字符串(H:|V:
)。然后我开始尝试准确地隔离选项do应用于 VFL。他们似乎not适用于 VFL 中的超级视图,并且仅适用于 VFL 字符串中提到的任何显式视图(这在某些情况下令人失望)。
我希望将来苹果添加某种新选项,让 VFL 选项考虑超级视图,即使仅当 VFL 中除了超级视图之外只有一个显式视图时才这样做。另一个解决方案可能是传递到 VFL 的另一个选项,其内容如下:NSLayoutFormatOptionIncludeSuperview
.
不用说,为了回答这个问题,我学到了很多关于 VFL 的知识。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)