iOS 自动布局扩展应用:代码中动态调整布局常量
来源:互联网 发布:javaagent java 编辑:程序博客网 时间:2024/06/11 06:21
一.设计需求
iOS Storyboard 自动布局技术,是iOS 6才出来的新技术,相当于多屏幕分辩率下自适应的技术。
但是一些复杂情况还是难处理。
比如有一个界面需求,进度条上显示标签,这个需求不难,难的是显要在显示表格框内,在各种机型显示正常。
最初设定是垂直居中向上偏15个像素
这是iPhone 4S 显示效果,下面与滑块还有错位
但是在iPhone 6下显示,下面有错位,但是上面留空太多
但如果把偏移量设为21.则出现另一种情况。
大屏幕的手机显示完美。
但是iPhone 4S下就错位了
因此我们如何解决这问题呢,如果能找到一种方法,在代码中支持调整这个一些常量,比如在iPhone 4S下我把它设为15,在Iphone6下高为21,这个问题就解决了。
二.代码中调整常量
事实上,iOS还提供这样方法来调整,一种方法是手工在代码中创建这个约束常量,然后不同机型赋值不一样。
另一种方法是在控件找到它的约束变量,用代码调整值即可,后者更为简单,因为我可以在Storyboard 针对大部分机型设置好变量,然后在小屏幕机型,微调一下即可。
两者测试均可实现,我现在实现后一种:
//查找对应的约束常量,注意分清是firstItem,还是secondItem.这个在Storybord能看说明,比哪区中对齐时,被对齐的控件是secondItem.+(NSLayoutConstraint *) findFirstConstraint:(UIView *)parentView firstItem:(id)firstItem attribute:(NSLayoutAttribute)attribute{ for (NSLayoutConstraint *constraint in parentView.constraints) { constraint.priority, constraint.secondItem); if((constraint.firstItem == firstItem) && (constraint.firstAttribute == attribute)){ NSLog(@"find! %@",firstItem); return constraint; } } return nil;}+(NSLayoutConstraint *) findSecondConstraint:(UIView *)parentView secondItem:(id)secondItem attribute:(NSLayoutAttribute)attribute{ for (NSLayoutConstraint *constraint in parentView.constraints) { if((constraint.secondItem == secondItem) && (constraint.secondAttribute == attribute)){ NSLog(@"find! %@",secondItem); return constraint; } } return nil;}
在创建方法中,判断一下是否是iPhone4S 小屏,如果将约束常量和字体均缩小,以便能加入。这里将对齐偏移量由21变成15,字号也缩小了2号
-(void)relayoutLabel{ //模拟器下总是 iPhone6 /iPhone5--> 320x568 // iPhone4S --> 320x480 // CGSize result = [[UIScreen mainScreen] bounds].size; if(result.height > 500) { return ; } //iPhone 4S 以下版本 NSLayoutConstraint *constraint; //找到约束常量 constraint = [Utils findSecondConstraint:self.banner01 secondItem:self.percent attribute:NSLayoutAttributeCenterY]; // // //垂直居中 // constraint = [NSLayoutConstraint // constraintWithItem:self.banner01 // attribute:NSLayoutAttributeCenterY // relatedBy:NSLayoutRelationEqual // toItem:self.percent // attribute:NSLayoutAttributeCenterY // multiplier:1.0f // constant:15.0f]; // [self.banner01 addConstraint:constraint]; constraint.constant = 15; //由21--》15 NSLog(@"constraint %f,%d",constraint.constant,constraint.firstAttribute); UIFont * font = [UIFont fontWithName:@"Helvetica" size:12]; //字体由14--》变成 12 [self.percent setFont:font];}
三.最终效果
最终实现效果:(iPhone 4S 还是有点错开,但是已经最大努力了,如果想完全错开,可以把字号变成10)
iPhone4S
iPhone 6效果
0 0
- iOS 自动布局扩展应用:代码中动态调整布局常量
- IOS 代码实现自动布局(视图尺寸自动调整)
- iOS中使用代码自动布局
- IOS代码实现自动布局
- 界面布局动态调整
- 界面布局动态调整
- 界面布局动态调整
- 界面布局动态调整
- 在iOS中自动布局
- IOS中自动布局autoresizing
- iOS 8自动调整UITableView和UICollectionView布局
- iOS 8自动调整UITableView和UICollectionView布局
- iOS 8自动调整UITableView和UICollectionView布局
- IOS布局笔记一(代码实现自动布局)
- ios 代码 自动布局(一)
- ios 代码 自动布局(二)
- 关于iOS代码实现自动布局
- ios自动布局使用代码添加约束
- Druid 数据库连接池连接MySQL中文乱码
- hdu 2085 核反应堆(递推)
- java用键盘的方向键控制一个图形块推着另一个图形块移动
- 数据库SQL中Like的用法总结
- Effective C++ 条款33
- iOS 自动布局扩展应用:代码中动态调整布局常量
- 数组逆序算法C
- 多个PCL库导致编译出错的问题
- Android加载网络图片学习过程
- 当URL编码遇到String.format
- 黑马程序员-Java之匿名内部类
- [SSH_注解]常用说明
- phonegap-捕获图片,音频,视屏
- HDU-1037-Keep on Truckin'(HDU最水的题没有之一,为了练英语就来吧)