// // StockInfoCardView.m // HC // // Created by huilinLi on 2025/12/1. // #import "StockInfoCardView.h" @interface StockInfoCardView () // 在实现文件中重新定义为 readwrite 方便内部赋值 @property (nonatomic, strong, readwrite) UILabel *mainPriceLabel; @property (nonatomic, strong, readwrite) UILabel *changePriceLabel; @property (nonatomic, strong, readwrite) UILabel *changePercentLabel; @property (nonatomic, strong, readwrite) UILabel *highValueLabel; @property (nonatomic, strong, readwrite) UILabel *openValueLabel; @property (nonatomic, strong, readwrite) UILabel *volumeValueLabel; @property (nonatomic, strong, readwrite) UILabel *lowValueLabel; @property (nonatomic, strong, readwrite) UILabel *turnoverRateLabel; @property (nonatomic, strong, readwrite) UILabel *amountLabel; @end @implementation StockInfoCardView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // 通常在 init 之后立即调用 setupView [self setupView]; } return self; } - (void)setupView { self.backgroundColor = [UIColor colorWithRed:0x20/255.0 green:0x20/255.0 blue:0x20/255.0 alpha:1]; // 1. 创建左上角价格和变化标签 _mainPriceLabel = [self createLabelWithFontSize:15 textColor:[UIColor redColor]]; _changePriceLabel = [self createLabelWithFontSize:8 textColor:[UIColor redColor]]; _changePercentLabel = [self createLabelWithFontSize:8 textColor:[UIColor redColor]]; // 2. 创建右侧信息标签(名称和值) // 标签名称(保持原有的布局比例) UILabel *cardLabelHeight = [self createLabelWithText:@"高" fontSize:15 color:[UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1]]; UILabel *cardLabelStart = [self createLabelWithText:@"开" fontSize:15 color:[UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1]]; UILabel *cardLabelVolume = [self createLabelWithText:@"量" fontSize:15 color:[UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1]]; UILabel *cardLabelLow = [self createLabelWithText:@"低" fontSize:15 color:[UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1]]; UILabel *cardLabelChange = [self createLabelWithText:@"换" fontSize:15 color:[UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1]]; UILabel *cardLabelQuota = [self createLabelWithText:@"额" fontSize:15 color:[UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1]]; // 标签值(初始内容与原代码相同) _highValueLabel = [self createLabelWithText:@"1617.260" fontSize:12 color:[UIColor redColor]]; _openValueLabel = [self createLabelWithText:@"1616.750" fontSize:12 color:[UIColor redColor]]; _volumeValueLabel = [self createLabelWithText:@"1.511亿" fontSize:12 color:[UIColor whiteColor]]; _lowValueLabel = [self createLabelWithText:@"1608.850" fontSize:12 color:[UIColor whiteColor]]; _turnoverRateLabel = [self createLabelWithText:@"--" fontSize:12 color:[UIColor whiteColor]]; _amountLabel = [self createLabelWithText:@"--" fontSize:12 color:[UIColor whiteColor]]; // 将所有子视图添加到 CardView NSArray *allSubviews = @[_mainPriceLabel, _changePriceLabel, _changePercentLabel, cardLabelHeight, cardLabelStart, cardLabelVolume, cardLabelLow, cardLabelChange, cardLabelQuota, _highValueLabel, _openValueLabel, _volumeValueLabel, _lowValueLabel, _turnoverRateLabel, _amountLabel]; for (UIView *view in allSubviews) { [self addSubview:view]; } // 3. 布局约束 (使用 self 代替原来的 _cardContainer) [NSLayoutConstraint activateConstraints:@[ // 左侧主要信息 [_mainPriceLabel.topAnchor constraintEqualToAnchor:self.topAnchor constant:25], [_mainPriceLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor constant:10], [_changePriceLabel.topAnchor constraintEqualToAnchor:self.topAnchor constant:50], [_changePriceLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor constant: 8], [_changePercentLabel.topAnchor constraintEqualToAnchor:self.topAnchor constant:50], [_changePercentLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor constant: 45], // 相对布局的 Label(高, 开, 量) [cardLabelHeight.bottomAnchor constraintEqualToAnchor:self.bottomAnchor constant:-75], [cardLabelStart.bottomAnchor constraintEqualToAnchor:cardLabelHeight.bottomAnchor], [cardLabelVolume.bottomAnchor constraintEqualToAnchor:cardLabelHeight.bottomAnchor], // 相对布局的 Label(低, 换, 额) [cardLabelLow.topAnchor constraintEqualToAnchor:self.bottomAnchor constant:-50], [cardLabelLow.leadingAnchor constraintEqualToAnchor:cardLabelHeight.leadingAnchor], [cardLabelChange.topAnchor constraintEqualToAnchor:self.bottomAnchor constant:-50], [cardLabelChange.leadingAnchor constraintEqualToAnchor:cardLabelStart.leadingAnchor], [cardLabelQuota.topAnchor constraintEqualToAnchor:self.bottomAnchor constant:-50], [cardLabelQuota.leadingAnchor constraintEqualToAnchor:cardLabelVolume.leadingAnchor], // 相对布局的 Value(高, 开, 量) [_highValueLabel.bottomAnchor constraintEqualToAnchor:self.topAnchor constant:45], [_highValueLabel.leadingAnchor constraintEqualToAnchor:cardLabelHeight.leadingAnchor], [_openValueLabel.bottomAnchor constraintEqualToAnchor:_highValueLabel.bottomAnchor], [_openValueLabel.leadingAnchor constraintEqualToAnchor:cardLabelStart.leadingAnchor], [_volumeValueLabel.bottomAnchor constraintEqualToAnchor:_highValueLabel.bottomAnchor], [_volumeValueLabel.leadingAnchor constraintEqualToAnchor:cardLabelVolume.leadingAnchor], // 相对布局的 Value(低, 换, 额) [_lowValueLabel.bottomAnchor constraintEqualToAnchor:self.bottomAnchor constant:-10], [_lowValueLabel.leadingAnchor constraintEqualToAnchor:cardLabelLow.leadingAnchor], [_turnoverRateLabel.bottomAnchor constraintEqualToAnchor:_lowValueLabel.bottomAnchor], [_turnoverRateLabel.leadingAnchor constraintEqualToAnchor:cardLabelChange.leadingAnchor], [_amountLabel.bottomAnchor constraintEqualToAnchor:_lowValueLabel.bottomAnchor], [_amountLabel.leadingAnchor constraintEqualToAnchor:cardLabelVolume.leadingAnchor] ]]; // 关键:基于父视图宽度比例的约束(使用 self 代替 _cardContainer) [NSLayoutConstraint constraintWithItem:cardLabelHeight attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:0.25 constant:0].active = YES; [NSLayoutConstraint constraintWithItem:cardLabelStart attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:0.5 constant:0].active = YES; [NSLayoutConstraint constraintWithItem:cardLabelVolume attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:0.75 constant:0].active = YES; } // 辅助方法:创建 UILabel - (UILabel *)createLabelWithFontSize:(CGFloat)size textColor:(UIColor *)color { UILabel *label = [[UILabel alloc] init]; label.textColor = color; label.font = [UIFont systemFontOfSize:size]; label.translatesAutoresizingMaskIntoConstraints = NO; return label; } // 辅助方法:创建带初始文本的 UILabel - (UILabel *)createLabelWithText:(NSString *)text fontSize:(CGFloat)size color:(UIColor *)color { UILabel *label = [self createLabelWithFontSize:size textColor:color]; label.text = text; return label; } @end