gpt4 book ai didi

ios - 使用自动布局将自定义 UIView 垂直和水平居中

转载 作者:IT王子 更新时间:2023-10-29 07:48:41 28 4
gpt4 key购买 nike

我正在尝试使用新推出的 iOS 6 自动布局 API 构建一个相当简单的动画自定义 UI。我正在构建的自定义 View 有一个圆圈,我希望它在垂直和水平方向上都居中。

不幸的是,我无法弄清楚为什么我的约束对于 UIButton 和 UILabel 元素似乎工作正常,但是当我将自定义 View 与自定义 CALayer 一起使用时会产生奇怪的结果(在本例中是一个圆圈,最终将被动画化) .

需要明确的是,我不希望我的 View 扩展到填满整个屏幕,而是要有动态“填充”,以便 View 在 iPhone 4 和 5 上都垂直居中。我还应该注意我我对 Cocoa 和 UIKit 很陌生。

RootViewController.m:

...
- (void)viewDidLoad {
[super viewDidLoad];

// Create Circle View
CGRect circle_view_rect = CGRectMake(0, 0, 100, 100);
UIView *circle_view = [[UIView alloc] initWithFrame:circle_view_rect];

// Create Circle Layer
CircleLayer *circle_layer = [[CircleLayer alloc] init];
circle_layer.needsDisplayOnBoundsChange = YES;
circle_layer.frame = circle_view.bounds;
[circle_view.layer addSublayer:circle_layer];

// Enable Auto Layout
[circle_view setTranslatesAutoresizingMaskIntoConstraints:NO];

[self.view addSubview:circle_view];

// Center Vertically
NSLayoutConstraint *centerYConstraint =
[NSLayoutConstraint constraintWithItem:circle_view
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:0.0];
[self.view addConstraint:centerYConstraint];

// Center Horizontally
NSLayoutConstraint *centerXConstraint =
[NSLayoutConstraint constraintWithItem:circle_view
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0.0];
[self.view addConstraint:centerXConstraint];
}
...

CircleLayer.m:

...
- (void)drawInContext:(CGContextRef)context {
CGContextAddArc(context, 50, 50, 50, 0.0, 2*M_PI, 0);
CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);
CGContextFillPath(context);
}
...

基本上我实现的约束是:

  • 在父 View 中垂直居中
  • 在父 View 内水平居中

这是我得到的结果:

Circle not centered with Auto Layout

任何帮助将不胜感激,我这几天一直在思考这个问题。

谢谢

最佳答案

尝试为您的 circle_view 添加高度和宽度限制。如果不添加这些(使用您的代码,减去图层内容),我什至无法获得一个痛苦的方形 View 。

NSLayoutConstraint *heightConstraint =
[NSLayoutConstraint constraintWithItem:circle_view
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:100.0];
[circle_view addConstraint:heightConstraint];

NSLayoutConstraint *widthConstraint =
[NSLayoutConstraint constraintWithItem:circle_view
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:100.0];
[circle_view addConstraint:widthConstraint];

关于ios - 使用自动布局将自定义 UIView 垂直和水平居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13726929/

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