我有一个UILabel
通过AutoLayout放置在我的情节提要上。 (约束包括水平方向的高度,宽度和中心以及与顶部的垂直间距)。
我有UIView
使用drawRect
用UIBeizerPath
方法围成一个圈。
到目前为止还算不上什么。
为简单起见,我使用硬编码数字来帮助说明我的问题。
现在,我希望将CircleView放置在UILabel
上方,使标签在圆中居中。
但是,我什么也无法正确排队。它像锚点或混乱的东西。
我尝试将CircleView的中心点设置为标签的中心点。没运气。
我尝试将CircleViews X设置为标签的位置减去宽度除以2的位置。没运气。
我能得到的最接近的是Y坐标。我使用label.center.y-52.5(半径的一半)。
cv = [[CircleView alloc] initWithFrame:CGRectMake(WHATHERE.x, WHATHERE.y,
155, 155)];
cv.radius = 75;
cv.strokeWidth = 5;
圆的半径为75。CircleView的宽度/高度为155,因为圆的笔触为5。(半径x 2)+ 5,这给了我用圆看到的视图。
深色背景是iOS模拟器的视图。我为每个元素添加了背景色以区分它们的大小。
通过Photoshop的魔力,这就是我想要实现的目标:
最佳答案
那就说明您做错了...使用约束!
这是我的Storyboard标签约束
这是我的ViewController
@interface ViewController ()
@property (nonatomic, weak) IBOutlet UILabel *centeredLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
CircleView *circleView = [CircleView new];
[self.view addSubview:circleView];
circleView.translatesAutoresizingMaskIntoConstraints = NO;
NSLayoutConstraint *circleCenterX = [NSLayoutConstraint constraintWithItem:circleView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.centeredLabel
attribute:NSLayoutAttributeCenterX
multiplier:1 constant:0];
NSLayoutConstraint *circleCenterY = [NSLayoutConstraint constraintWithItem:circleView
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self.centeredLabel
attribute:NSLayoutAttributeCenterY
multiplier:1 constant:0];
CGFloat circleDiameter = 155;
NSLayoutConstraint *circleWidth = [NSLayoutConstraint constraintWithItem:circleView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1 constant:circleDiameter];
NSLayoutConstraint *circleHeight = [NSLayoutConstraint constraintWithItem:circleView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:circleView
attribute:NSLayoutAttributeWidth
multiplier:1 constant:0];
[self.view addConstraints:@[circleCenterX, circleCenterY, circleWidth, circleHeight]];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
这是CircleView
@implementation CircleView
- (instancetype)init{
self = [super init];
if (self) {
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
UIColor *blueTransparent = [[UIColor blueColor] colorWithAlphaComponent:0.4];
[blueTransparent setFill];
CGContextFillRect(ctx, self.bounds);
UIColor *circleColor = [UIColor greenColor];
[circleColor setStroke];
CGContextSetLineWidth(ctx, 6);
CGContextStrokeEllipseInRect(ctx, self.bounds);
}
@end
这就是结果
小菜一碟 ! ;)
关于ios - 将动态创建的UIView放在 Storyboard 中的UILabel上居中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29633881/