热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

iOS中根据屏幕宽度自适应分布按钮的实例代码

这篇文章主要介绍了iOS中根据屏幕宽度自适应分布按钮的实例代码,本文给大家分享两种方式,代码简单易懂,需要的朋友可以参考下

 下载demo链接:https://github.com/MinLee6/buttonShow.git

屏幕摆放的控件有两种方式,一种根据具体内容变化,一种根据屏幕宽度变化。

下面我分别将两个方式,用代码的方式呈现:

1:根据具体内容变化

// 
// StyleOneViewController.m 
// buttonShow 
// 
// Created by limin on 15/06/15. 
// Copyright © 2015年 信诺汇通信息科技(北京)有限公司. All rights reserved. 
// 
#import "StyleOneViewController.h" 
#import "UIViewExt.h" 
//每列间隔 
#define KViewMargin 10 
//每行列数高 
#define KVieH 28 
#define KscreenW [UIScreen mainScreen].bounds.size.width 
#define Color(R,G,B) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:1.0] 
@interface StyleOneViewController () 
{ 
UIButton *tmpBtn; 
CGFloat btnW; 
CGFloat btnViewHeight; 
} 
/* 存放按钮的view */ 
@property(nonatomic,strong)UIView *btnsView; 
/* 按钮上的文字 */ 
@property(nonatomic,strong)NSMutableArray *btnMsgArrays; 
@property (nonatomic,strong) NSMutableArray* btnIDArrays; 
/** 所有按钮 */ 
@property(nonatomic,strong)NSMutableArray *allBtnArrays; 
/** 服务器提供按钮标签 */ 
@property(nonatomic,strong)NSArray *tagInfoArray; 
//-------展示选中的文字 
/* 确认按钮 */ 
@property(nonatomic,strong)UIButton *sureButton; 
/* 文字 */ 
@property(nonatomic,strong)UILabel *showLabel; 
@end 
@implementation StyleOneViewController 
- (void)viewDidLoad { 
[super viewDidLoad]; 
self.view.backgroundColor = [UIColor whiteColor]; 
[self getTagMsg]; 
} 
-(void)getTagMsg 
{ 
self.btnMsgArrays = [[NSMutableArray alloc]init]; 
_allBtnArrays = [[NSMutableArray alloc]init]; 
self.btnIDArrays = [[NSMutableArray alloc]init]; 
self.tagInfoArray = @[@{@"id":@"1",@"tagmsg":@"味道很好味道很好"}, 
@{@"id":@"1",@"tagmsg":@"环境不错"}, 
@{@"id":@"1",@"tagmsg":@"性价比高"}, 
@{@"id":@"1",@"tagmsg":@"位置好找"}, 
@{@"id":@"1",@"tagmsg":@"上菜快"}, 
@{@"id":@"1",@"tagmsg":@"菜量足"}, 
@{@"id":@"1",@"tagmsg":@"好吃"}, 
@{@"id":@"1",@"tagmsg":@"态度好,服务周到"} 
]; 
//挨个赋值 
for (int i=0; i<_tagInfoArray.count; i++) { 
NSDictionary *dict = _tagInfoArray[i]; 
[self.btnIDArrays addObject:dict[@"id"]]; 
[self.btnMsgArrays addObject:dict[@"tagmsg"]]; 
} 
[self createBtns]; 
} 
//创建按钮 
-(void)createBtns{ 
//创建放置button的view 
self.btnsView = [[UIView alloc]initWithFrame:CGRectMake(10, 40, KscreenW-2*KViewMargin, 40)]; 
self.btnsView.backgroundColor = Color(237, 237, 237); 
[self.view addSubview:self.btnsView]; 
/** 
* 数组存放适配屏幕大小的每行按钮的个数 
*/ 
NSMutableArray *indexbtns=[self returnBtnsForRowAndCol]; 
//统计按钮View的高度 
btnViewHeight=indexbtns.count*(KVieH+KViewMargin)+10; 
//设置btnView的高度 
self.btnsView.height=btnViewHeight; 
NSInteger count=0; 
CGFloat Y; 
//循环创建按钮 
for (int row=0; rowKscreenW-10) { 
//判断第一行情况 
NSInteger lastNum=[[tmpbtns lastObject]integerValue]; 
[indexbtns addObject:@(lastNum)]; 
[tmpbtns removeAllObjects]; 
allWidth=0.0; 
countW=0; 
j-=1; 
}else{ 
[tmpbtns addObject:@(countW)]; 
} 
} 
if (tmpbtns.count!=0) { 
NSInteger lastNum=[[tmpbtns lastObject]integerValue]; 
[indexbtns addObject:@(lastNum)]; 
} 
return indexbtns; 
} 
-(CGFloat)returnBtnWithWithStr:(NSString *)str{ 
//计算字符长度 
NSDictionary *minattributesri = @{NSFontAttributeName:[UIFont systemFontOfSize:12]}; 
CGSize mindetailSizeRi = [str boundingRectWithSize:CGSizeMake(100, MAXFLOAT) options:NSStringDrawingUsesFontLeading attributes:minattributesri context:nil].size; 
return mindetailSizeRi.width+12; 
} 
#pragma mark-按钮点击事件 
-(void)btnClick:(UIButton *)btn 
{ 
btn.selected = !btn.isSelected; 
if (btn.isSelected) { 
btn.layer.borderColor = Color(202, 48, 130).CGColor; 
}else 
{ 
btn.layer.borderColor = Color(156, 156, 156).CGColor; 
} 
} 
-(void)showSelectedClick:(UIButton *)btn 
{ 
NSMutableArray *strArray = [[NSMutableArray alloc]init]; 
for (UIButton *btn in self.allBtnArrays) { 
if (btn.isSelected) { 
[strArray addObject:btn.currentTitle]; 
} 
} 
NSString *str = [strArray componentsJoinedByString:@" & "]; 
UIFont *fOnt= [UIFont systemFontOfSize:14]; 
CGFloat strH = [str boundingRectWithSize:CGSizeMake(KscreenW-2*KViewMargin, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil].size.height; 
//展示文字 
if (!self.showLabel) { 
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(KViewMargin, self.sureButton.bottom+20, KscreenW-2*KViewMargin, strH)]; 
label.fOnt= font; 
label.textColor = [UIColor redColor]; 
label.numberOfLines = 0; 
self.showLabel = label; 
[self.view addSubview:label]; 
} 
self.showLabel.text = str; 
self.showLabel.height = strH; 
} 
-(void)backBtnClick:(UIButton *)btn 
{ 
[self dismissViewControllerAnimated:YES completion:nil]; 
} 
- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 
/* 
#pragma mark - Navigation 
// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
// Get the new view controller using [segue destinationViewController]. 
// Pass the selected object to the new view controller. 
} 
*/ 
@end

2:根据屏幕宽度变化。

//// StyleTwoViewController.m 
// buttonShow 
// 
// Created by limin on 16/11/15. 
// Copyright © 2016年 君安信(北京)科技有限公司. All rights reserved. 
// 
#import "StyleTwoViewController.h" 
#import "UIViewExt.h" 
#define kTagMargin 14 
#define kCellMargin 15 
#define kScreenWidth [UIScreen mainScreen].bounds.size.width 
#define Color(R,G,B) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:1.0] 
@interface StyleTwoViewController () 
/* 按钮 */ 
@property(nonatomic,strong)NSMutableArray *btnsArray; 
/* 按钮文字 */ 
@property(nonatomic,strong)NSArray *tagsArray; 
/* 默认选择的按钮 */ 
@property(nonatomic,strong)UIButton *selectedBtn; 
/* 标签 */ 
@property(nonatomic,copy)NSString *selectTopicTitle; 
@end 
@implementation StyleTwoViewController 
- (void)viewDidLoad { 
[super viewDidLoad]; 
self.view.backgroundColor = [UIColor whiteColor]; 
[self getTagMsg]; 
} 
-(void)getTagMsg 
{ 
_btnsArray = [NSMutableArray array]; 
//添加tag按钮 
NSArray *tagsArray = @[@"美好生活1",@"美好生活2",@"美好生活3",@"美好生活4",@"美好生活5",@"美好生活6",@"美好生活7",@"美好生活8",@"美好生活9",@"美好生活10",@"美好生活11",@"美好生活12",@"美好生活13",@"美好生活14",@"美好生活15",@"美好生活16",@"美好生活17",@"美好生活18",@"美好生活19",@"美好生活20",@"美好生活21",@"美好生活22",@"美好生活23",@"美好生活24"]; 
_tagsArray = tagsArray; 
[self createTagSqures:tagsArray]; 
} 
#pragma mark - 创建方块 
-(void)createTagSqures:(NSArray *)tags 
{ 
//一行最多4个。 
int maxCols = 4; 
//宽度、高度 
CGFloat TotalWidth = kScreenWidth - 2*kCellMargin - (maxCols-1)*kTagMargin; 
CGFloat BtnWidth = TotalWidth / maxCols; 
CGFloat BtnHeight = 30; 
for (int i=0; i

以上所述是小编给大家介绍的iOS 中根据屏幕宽度自适应分布按钮的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 本文总结了在使用React Native开发过程中遇到的一些常见问题及其解决方法,包括配置错误、依赖问题和特定组件的使用技巧。 ... [详细]
  • 深入解析 Git 代码提交流程及常见问题处理
    本文详细阐述了使用 Git 进行代码提交的具体步骤,并提供了遇到常见问题时的解决方案,旨在帮助开发者更加高效地管理代码。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • 本文介绍了如何通过源码编译和PECL命令来升级Swoole扩展,详细记录了可能遇到的问题及解决方案。 ... [详细]
  • 本文详细介绍了Python的multiprocessing模块,该模块不仅支持本地并发操作,还支持远程操作。通过使用multiprocessing模块,开发者可以利用多核处理器的优势,提高程序的执行效率。 ... [详细]
  • 本文详细解析了在使用Git进行代码推送时常见的两个错误——'fetch first'和'non-fast-forward',并提供了有效的解决方案。通过理解这些错误背后的原因,开发者可以更加高效地管理代码版本。 ... [详细]
  • 本文详细介绍了Java库中com.badlogic.gdx.scenes.scene2d.Stage类下的mouseMoved()方法,并提供了多个实际应用场景的代码示例,帮助开发者更好地理解和使用这一方法。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • 本文提供了详细的步骤,指导用户如何下载并安装 Git 的中文语言包,以提升用户体验。 ... [详细]
  • 解析 HTTP 头 'Vary: Accept-Encoding' 的作用与重要性
    本文详细探讨了 'Vary: Accept-Encoding' HTTP 头的作用,即指导缓存系统(如代理服务器和 CDN)根据不同的编码需求存储和提供适当的资源版本,确保不同类型的客户端能够接收到适合自己的内容。 ... [详细]
  • Web网络基础
    目录儿1使用HTTP协议访问Web2HTTP的诞生2.1因特网的起源2.2互联网、因特网与万维网2.3万维网与HTTP3网络基础TCPIP3.1TCPIP协议族3.2TCPIP的分 ... [详细]
  • Python中调用Java代码的方法与实践
    本文探讨了如何在Python环境中集成并调用Java代码,通过具体的步骤和示例展示了这一过程的技术细节。适合对跨语言编程感兴趣的开发者阅读。 ... [详细]
  • 去控件化在线文档处理,推动高效信创办公环境
    探讨在线文档处理去控件化的趋势及其对构建高效信创办公生态的影响。 ... [详细]
author-avatar
渴求打怪升级
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有