IOS:个人笔记|UI调整UI内部子控件
先声明一个普通的按钮,看看正常情况下的样子
1 UIButton *testBtn=[UIButton buttonWithType:UIButtonTypeCustom]; 2 testBtn.frame=CGRectMake(100, 100, 200, 100); 3 testBtn.backgroundColor=[UIColor yellowColor]; 4 [testBtn setTitle:@"按钮" forState:UIControlStateNormal]; 5 testBtn.titleLabel.backgroundColor=[UIColor redColor]; 6 testBtn.imageView.backgroundColor=[UIColor blackColor]; 7 //设置内容图片 8 [testBtn setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal]; 9 [self.view addSubview: testBtn];
如果我们调整按钮内部控件,imageview和title,直接xxx.frame是改不掉的,按钮的内部会覆盖掉。
如果想要修改,需要自己写一个按钮类,也就是继承button类,重写其中的一些方法
重新创建一个类,继承类,重写如下两个方法,可以改变image和title的frame。或者直接重写layoutSubviews方法也是可以的,这里我就全写出来放一起了
1 - (CGRect)titleRectForContentRect:(CGRect)contentRect{ 2 3 return CGRectMake(0, 0, 100, 70); 4 } 5 - (CGRect)imageRectForContentRect:(CGRect)contentRect 6 { 7 8 return CGRectMake(100, 0, 70, 70); 9 } 10 11 - (void)layoutSubviews{ 12 [super layoutSubviews]; 13 self.imageView.frame=CGRectMake(100, 0, 70, 70); 14 self.titleLabel.frame=CGRectMake(0, 0, 100, 70); 15 }
此外,也可以设置文本的显示模式和图片的显示模式
1 - (instancetype)initWithFrame:(CGRect)frame 2 { 3 self = [super initWithFrame:frame]; 4 if (self) { 5 //文本居中 6 self.titleLabel.textAlignment=NSTextAlignmentCenter; 7 //改变图片的内容模式 8 self.imageView.contentMode=UIViewContentModeCenter; 9 } 10 return self; 11 }
-------------------------------
按钮内边距设置
xxBtn.contentEdgeInsets=UIedgeInsetsMake();
xxBtn.imageEdgeInsets=UIedgeInsetsMake();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端