我刚开始学习iOS的自动布局,并研究了视觉格式语言.
一切都很好,除了一件事:我就是不能让视图在其SuperView中居中.
使用VFL可以做到这一点吗?或者我需要自己手动创建约束吗?
我刚开始学习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的知识.