gpt4 book ai didi

ios - 使用自动布局以编程方式将自定义 UIView 居中

转载 作者:行者123 更新时间:2023-11-29 02:58:32 30 4
gpt4 key购买 nike

我创建了一个非常基本的圆形 View 。它只是调用一个自定义的 Init 方法,该方法将层半径设置为其宽度的一半。 View Controller 创建 subview ,添加它,然后设置约束以使圆居中。

注意:我已经检查了同一问题的多个 SO 答案,并且约束似乎设置正确/相同。

问题是添加约束后 View 不会显示。我已经注销了circleView边界和框架,它们都显示为0,0,100,100,这是框架最初设置的内容,但 View 根本不显示?移除约束,框架为 0,0,100,100 并显示在此位置。所以看起来添加约束会使 View 消失。

- (void)viewDidLoad
{
NSLog(@"%s",__PRETTY_FUNCTION__);
[super viewDidLoad];

[self setupViewControllerViews];

}

-(void)setupViewControllerViews {
self.circleView = [[CCZTCircleView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[self.view addSubview:self.circleView];

[self setupCircleViewAutoLayoutConstraints];
}

-(void)setupCircleViewAutoLayoutConstraints {
NSLayoutConstraint *xCenterConstraint = [NSLayoutConstraint constraintWithItem:self.circleView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
NSLayoutConstraint *yCenterConstraint = [NSLayoutConstraint constraintWithItem:self.circleView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0];

[self.view addConstraint:xCenterConstraint];
[self.view addConstraint:yCenterConstraint];

}

最佳答案

如果您使用自动布局,您在开始时设置的框架将被忽略,因为使用自动布局 Cocoa touch 将根据您设置的约束相应地更改 View 的框架。在您设置约束以获得预期结果的方法中添加以下行(您需要设置固定高度和固定宽度约束):

UIView *view = self.circleView;

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[view(100)]"
options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
[self.view addConstraints:constraints];

constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view(100)]"
options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
[self.view addConstraints:constraints];

因此,当您创建 View 时,指定任何框架都是多余的,因为它将由自动布局定义 - 我发现像 [[UIView alloc] init] 这样简单地实例化我的 View 很有用,这样我在代码中清楚地表明框架不直接涉及。

关于ios - 使用自动布局以编程方式将自定义 UIView 居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23566150/

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