IOS:个人笔记|UI调整UI内部子控件

先声明一个普通的按钮,看看正常情况下的样子

复制代码
1 UIButton *testBtn=[UIButton buttonWithType:UIButtonTypeCustom];
2     testBtn.frame=CGRectMake(100100200100);
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(0010070);
 4 }
 5  - (CGRect)imageRectForContentRect:(CGRect)contentRect
 6 {
 7     
 8     return CGRectMake(10007070);
 9 }
10 
11 - (void)layoutSubviews{
12     [super layoutSubviews];
13     self.imageView.frame=CGRectMake(10007070);
14     self.titleLabel.frame=CGRectMake(0010070);
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();

posted @   DDD-SagerKing  阅读(169)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示
主题色彩