IOS 纯代码自定义UIView案例

objectivec 复制代码
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface OrderAfterPeriodSelectNumView : UIView
//左边标题
@property (nonatomic,strong) UILabel *titleLab;
//数量
@property (nonatomic,strong) UILabel *numLab;

@end
objectivec 复制代码
#import "OrderAfterPeriodSelectNumView.h"
@interface OrderAfterPeriodSelectNumView()
@property (nonatomic, assign) CGFloat titleLabWidth;
@end

@implementation OrderAfterPeriodSelectNumView

#pragma mark - 原始初始化方法

// 1、首先调用init方法
- (instancetype)init{
    if (self = [super init]) {
        [self initUI];
    }
    return self;
}
  
// 2、然后调用initWithFrame方法
- (instancetype)initWithFrame:(CGRect)frame{
    if (self =[super initWithFrame:frame]) {
        [self initUI];
    }
    return self;
}
// 初始化UI控件
- (void) initUI{
    UILabel *titleLab = [[UILabel alloc] init];
    titleLab.textColor = [UIColor colorWithHexString:@"333333"];
    titleLab.font = [UIFont systemFontOfSize:14];
    titleLab.textAlignment = NSTextAlignmentLeft;
    titleLab.text = @"退款数量";
    [self addSubview:titleLab];
    _titleLab = titleLab;
    
    UILabel *numLab = [[UILabel alloc] init];
    titleLab.textColor = [UIColor colorWithHexString:@"333333"];
    numLab.font = [UIFont systemFontOfSize:14];
    numLab.textAlignment = NSTextAlignmentRight;
    numLab.text = @"0";
    [self addSubview:numLab];
    _numLab = numLab;
    //获取字符串的宽高
    CGRect rect = [titleLab.text boundingRectWithSize:CGSizeMake(SCREENWIDTH, MAXFLOAT) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14]} context:nil];
    _titleLabWidth = rect.size.width;

}
// 设置UI控件的frame
- (void)layoutSubviews{
    [super layoutSubviews];
    // 1.获取当前控件的尺寸
    CGFloat width = self.frame.size.width;
    CGFloat height = self.frame.size.height;
    
    // 2.设置子控件的frame
    self.titleLab.frame = CGRectMake(16, 0, self.titleLabWidth, height);
    self.numLab.frame = CGRectMake(16+self.titleLabWidth, 0, width - (16+self.titleLabWidth+16), height);
    
}

@end

添加到UIStackView

objectivec 复制代码
OrderAfterPeriodSelectNumView *numView = [[OrderAfterPeriodSelectNumView alloc] init];
[numView mas_makeConstraints:^(MASConstraintMaker *make) {
     make.height.equalTo(@(50));
 }];
self.numView = numView;
[self.stackView addArrangedSubview:numView];
相关推荐
2501_9151063210 小时前
苹果App Store上架费用及流程全面解析
android·ios·小程序·https·uni-app·iphone·webview
Privasa-隐私实验室11 小时前
蓝牙-多设备调试效率翻倍:从手动折腾到全自动调试的完整落地流程
物联网·ios·智能家居·智能硬件·智能手表
johnsong13 小时前
AI前沿日报 2026-09-08
人工智能·macos
黑科技iOS上架15 小时前
UnityiOS工程混淆能解决App Store4.3被拒么?
ios·审核
恋猫de小郭16 小时前
iPhone Duo 适配详解,需要改变的不止是布局模型
前端·flutter·ios
33三 三like18 小时前
基于 MAC-RUNGUIDE 的完整启动流程
macos
Digitally18 小时前
如何在不从 iCloud 删除的情况下从iPhone删除照片
ios·iphone·icloud
游戏开发爱好者81 天前
网络连接排查指南,谁在电脑后台偷跑流量,哪些程序在联网
网络协议·计算机网络·网络安全·ios·adb·https·udp
ii_best1 天前
安卓脚本/ios开发软件按键精灵实战:自动定位弹窗广告关闭按钮坐标的通用方案
android·ios·自动化
Behaviour1 天前
iPhone Duo 来了,苹果 Siri AI 接入定制 Gemini
人工智能·ios·语言模型·aigc·iphone