Files
featherVoice/TUIKit/TUIContact/UI_Minimalist/UI/TUIFriendProfileHeaderView_Minimalist.m
2025-08-08 10:49:36 +08:00

180 lines
5.8 KiB
Objective-C

//
// TUIFriendProfileHeaderView_Minimalist.m
// TUIContact
//
// Created by wyl on 2022/12/14.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIFriendProfileHeaderView_Minimalist.h"
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMConfig.h>
#import <TUICore/TUICore.h>
#import <TUICore/TUIThemeManager.h>
@implementation TUIFriendProfileHeaderItemView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setupView];
}
return self;
}
- (void)setupView {
self.iconView = [[UIImageView alloc] initWithImage:DefaultAvatarImage];
[self addSubview:self.iconView];
self.iconView.userInteractionEnabled = YES;
self.iconView.contentMode = UIViewContentModeScaleAspectFit;
self.textLabel = [[UILabel alloc] init];
self.textLabel.font = [UIFont systemFontOfSize:kScale390(16)];
self.textLabel.textColor = [UIColor tui_colorWithHex:@"#000000"];
self.textLabel.rtlAlignment = TUITextRTLAlignmentCenter;
[self addSubview:self.textLabel];
self.textLabel.text = @"Message";
self.backgroundColor = [UIColor tui_colorWithHex:@"#f9f9f9"];
self.layer.cornerRadius = kScale390(12);
self.layer.masksToBounds = YES;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(click)];
[self addGestureRecognizer:tap];
}
+ (BOOL)requiresConstraintBasedLayout {
return YES;
}
// this is Apple's recommended place for adding/updating constraints
- (void)updateConstraints {
[super updateConstraints];
[self.iconView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(kScale390(30));
make.top.mas_equalTo(kScale390(19));
make.centerX.mas_equalTo(self);
}];
[self.textLabel sizeToFit];
[self.textLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self);
make.height.mas_equalTo(kScale390(19));
make.top.mas_equalTo(self.iconView.mas_bottom).mas_offset(kScale390(11));
make.centerX.mas_equalTo(self);
}];
}
- (void)layoutSubviews {
[super layoutSubviews];
}
- (void)click {
if (self.messageBtnClickBlock) {
self.messageBtnClickBlock();
}
}
@end
@interface TUIFriendProfileHeaderView_Minimalist ()
@end
@implementation TUIFriendProfileHeaderView_Minimalist
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setupView];
}
return self;
}
- (void)setupView {
self.headImg = [[UIImageView alloc] initWithImage:DefaultAvatarImage];
[self addSubview:self.headImg];
self.headImg.userInteractionEnabled = YES;
self.headImg.contentMode = UIViewContentModeScaleAspectFit;
self.descriptionLabel = [[UILabel alloc] init];
self.descriptionLabel.font = [UIFont boldSystemFontOfSize:kScale390(24)];
[self addSubview:self.descriptionLabel];
self.functionListView = [[UIView alloc] init];
[self addSubview:self.functionListView];
}
- (void)setItemViewList:(NSArray<TUIFriendProfileHeaderItemView *> *)itemList {
for (UIView *subView in self.functionListView.subviews) {
[subView removeFromSuperview];
}
if (itemList.count > 0) {
for (TUIFriendProfileHeaderItemView *itemView in itemList) {
[self.functionListView addSubview:itemView];
}
CGFloat width = kScale390(92);
CGFloat height = kScale390(95);
CGFloat space = kScale390(24);
CGFloat contentWidth = itemList.count * width + (itemList.count - 1) * space;
CGFloat x = 0.5 * (self.bounds.size.width - contentWidth);
for (TUIFriendProfileHeaderItemView *itemView in itemList) {
itemView.frame = CGRectMake(x, 0, width, height);
x = CGRectGetMaxX(itemView.frame) + space;
}
}
// tell constraints they need updating
[self setNeedsUpdateConstraints];
// update constraints now so we can animate the change
[self updateConstraintsIfNeeded];
[self layoutIfNeeded];
}
+ (BOOL)requiresConstraintBasedLayout {
return YES;
}
// this is Apple's recommended place for adding/updating constraints
- (void)updateConstraints {
[super updateConstraints];
CGFloat imgWidth = kScale390(94);
[self.headImg mas_remakeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(imgWidth);
make.centerX.mas_equalTo(self.mas_centerX);
make.top.mas_equalTo(kScale390(42));
}];
MASAttachKeys(self.headImg);
if ([TUIConfig defaultConfig].avatarType == TAvatarTypeRounded) {
self.headImg.layer.masksToBounds = YES;
self.headImg.layer.cornerRadius = imgWidth / 2;
} else if ([TUIConfig defaultConfig].avatarType == TAvatarTypeRadiusCorner) {
self.headImg.layer.masksToBounds = YES;
self.headImg.layer.cornerRadius = [TUIConfig defaultConfig].avatarCornerRadius;
}
[self.descriptionLabel sizeToFit];
[self.descriptionLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.mas_centerX);
make.top.mas_equalTo(self.headImg.mas_bottom).mas_offset(kScale390(10));
make.height.mas_equalTo(30);
make.width.mas_equalTo(self.descriptionLabel.frame.size.width);
make.width.mas_lessThanOrEqualTo(self).multipliedBy(0.5);
}];
MASAttachKeys(self.descriptionLabel);
if (self.functionListView.subviews.count > 0) {
[self.functionListView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(0);
make.width.mas_equalTo(self.bounds.size.width);
make.height.mas_equalTo(kScale390(95));
make.top.mas_equalTo(self.descriptionLabel.mas_bottom).mas_offset(kScale390(18));
}];
}
}
- (void)layoutSubviews {
[super layoutSubviews];
}
@end