gpt4 book ai didi

ios - UIView+Autolayout 没有给我正确的定位——我做错了什么?

转载 作者:行者123 更新时间:2023-11-28 22:15:33 25 4
gpt4 key购买 nike

我正在使用 UIView+Autolayout库使基于代码的自动布局约束创建更容易,但我在使用此库添加约束时遇到问题。

我想做的是:

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.captionLabel attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.captionLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]];

它使用正常的 NSLayoutConstraint 添加方法,并且效果很好。但是当我尝试使用 UIView+Autolayout 做类似的事情时:

[self.captionLabel autoAlignAxisToSuperviewAxis:ALAxisHorizontal];
[self.captionLabel autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:20.0];

它在中间垂直对齐并偏向左侧。

我的设置有什么问题吗?

最佳答案

您使用 NSLayoutConstraint API 共享的代码:

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.captionLabel attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.captionLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]];

将使用 UIView+AutoLayout API 转换为以下内容:

[self.captionLabel autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:0.0];
[self.captionLabel autoAlignAxisToSuperviewAxis:ALAxisVertical];

请注意,ALAxisVertical 是要使用的正确常量,而不是您最初使用的 ALAxisHorizo​​ntal。要了解原因,请查看 comments where this enum is defined :

typedef NS_ENUM(NSInteger, ALAxis) {
ALAxisVertical = NSLayoutAttributeCenterX, // a vertical line through the center of the view
ALAxisHorizontal = NSLayoutAttributeCenterY, // a horizontal line through the center of the view
ALAxisBaseline = NSLayoutAttributeBaseline // a horizontal line at the text baseline (not applicable to all views)
};

如果您对齐两个 View 的垂直轴,就像我们在这里所做的那样,您最终会调整它们的 x 位置和/或大小,以便它们最终(您可能会描述为)水平居中。这可能是一些困惑所在。一如既往,一张图片胜过一千个字:

Illustration of aligning a view to its superview using ALAxisVertical

当您了解 ALAxis 常量的定义方式并从视觉上考虑它时,它是有道理的(您会发现它与这些常量在整个 API 中的使用方式一致)。

关于ios - UIView+Autolayout 没有给我正确的定位——我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21816667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com