【发布时间】:2021-01-27 17:04:28
【问题描述】:
我试图根据meter(白框)水平居中gradientLayerContainer,但它不起作用。但是,当我使用相同的方法将meter 根据_mapArea 水平居中时,它可以工作。这真的让我很困惑。
UIView* meter = [[UIView alloc] init];
[meter setTranslatesAutoresizingMaskIntoConstraints:NO];
meter.backgroundColor = UIColor.whiteColor;
[_mapArea addSubview:meter];
[NSLayoutConstraint activateConstraints:@[
[meter.widthAnchor constraintEqualToConstant:_mapArea.frame.size.width * 1],
[meter.heightAnchor constraintEqualToConstant:60],
[meter.centerXAnchor constraintEqualToAnchor:_mapArea.centerXAnchor],
[meter.topAnchor constraintEqualToAnchor:_mapArea.topAnchor constant:16]
]];
[meter layoutIfNeeded];
// gradient bar
CAGradientLayer* gradientLayer = [[CAGradientLayer alloc] init];
gradientLayer.frame = CGRectMake(0, 0, meter.frame.size.width * 0.9, 30);
gradientLayer.colors = [NSArray arrayWithObjects:
(id)[UIColor clearColor].CGColor,
(id)[UIColor whiteColor].CGColor,
(id)[UIColor colorWithRed:0.19 green:0.3 blue:0.8 alpha:1.0].CGColor,
(id)[UIColor colorWithRed:0.73 green:0.23 blue:0.25 alpha:1.0].CGColor,
(id)[UIColor yellowColor].CGColor, nil];
gradientLayer.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.01f],
[NSNumber numberWithFloat:0.1f],
[NSNumber numberWithFloat:0.5f],
[NSNumber numberWithFloat:1.0f],
nil];
gradientLayer.startPoint = CGPointMake(0, 0.5);
gradientLayer.endPoint = CGPointMake(1, 0.5);
UIView* gradientLayerContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, gradientLayer.frame.size.width, gradientLayer.frame.size.height)];
[gradientLayerContainer.layer addSublayer:gradientLayer];
[gradientLayerContainer setTranslatesAutoresizingMaskIntoConstraints:NO];
[meter addSubview: gradientLayerContainer];
[NSLayoutConstraint activateConstraints:@[
[gradientLayerContainer.centerXAnchor constraintEqualToAnchor:meter.centerXAnchor],
[gradientLayerContainer.topAnchor constraintEqualToAnchor:meter.topAnchor constant:4]
]];
[gradientLayerContainer layoutIfNeeded];
【问题讨论】:
-
layoutSubview 完成后,您需要调整
CAGradientLayer的大小,它不会跟随视图的框架。
标签: ios objective-c uiview autolayout constraints