前些日子出来了iphone6和6plus 使的iOS的适配再也不适合用绝对布局了 本人之前一直是做android开发的 最近开始学起了ios 于是也自然而然的学起了蛋疼的autolayout适配 现在在storyboard中是能够熟练用约束适配了 但是总有些特殊情况需要在逻辑代码中适配 于是我想起了android的屏幕密度概念 就想写个工具类 使得在ios的controller中也能轻松的设置控件的具体大小和比例 并自动适配

  1. 必须要在项目启用了autolayout之后才能用 因为工具类里是用vfl来设置大小的

  2. android的屏幕密度其实不是这个意思 计算也比这个复杂的多 不过是借个概念 实现个差不多的效果

  3. 这个工具类主要是用来在使用autolayout布局时设置某个控件一个具体的像素大小的 只不过这个控件的这个具体大小会根据屏幕自动拉伸适配

  4. 设置具体大小的原始标准是4寸屏,设大小时要参照这个 也就是说 比如界面上有个button 在4寸屏时希望他宽高都是50像素 那就直接把他设为50就行了 到了4.7寸和5.5寸时 他的大小自然会等比扩大,至于这个button扩大之后的位置 这个当然在用autolayout的布局约束时就已经控制好的了

  5. 这个适配方法可能不是很好,可能是我才初学 不清楚autolayout的强大 因为不是所有的界面需要显示的控件都能通过他和周围控件的约束就能适配的 直接约束控件大小的话在4寸屏显示正好 但是到了5.5寸虽然位置什么的都正常 但是大小却会变的偏小了 但我觉得autolayout不应该解决不了这个问题的啊 所以在此做个保留 可能是我还没真正领悟到autolayout 下面贴上工具类代码 仅供参考吧


  6. #import<Foundation/Foundation.h>#import<UIKit/UIKit.h>@interfaceDensity:NSObject/**模拟android屏幕密度的概念*/+(NSInteger)pixelsToDip:(float)pixels;//pixels转dip+(void)setWidth:(UIView*)viewcurrentView:(UIView*)currentViewpixels:(float)pixels;//设置控件自动适配的width+(void)setHeight:(UIView*)viewcurrentView:(UIView*)currentViewpixels:(float)pixels;//设置控件自动适配的height+(void)setSize:(UIView*)viewcurrentView:(UIView*)currentViewpixels:(float)pixels;//自动适配控件拉伸比例(宽高相同)+(void)setSize:(UIView*)viewcurrentView:(UIView*)currentViewxPixels:(float)xPixelsyPixels:(float)yPixels;//自动适配控件拉伸比例(宽高不同)+(void)setTextFont:(UILabel*)viewsize:(float)size;//自动适配Label文字大小+(void)setMutableWidth:(UIView*)viewcurrentView:(NSDictionary*)currentViewpixels:(float)pixels;//批量自动适配控件宽度拉伸比例(宽高相同)+(void)setMutableSize:(UIView*)viewcurrentView:(NSDictionary*)currentViewxPixels:(float)xPixelsyPixels:(float)yPixels;//批量自动适配控件拉伸比例(宽高不同)+(void)setMutableTextFont:(NSDictionary*)currentViewsize:(float)size;//批量自动适配Label文字大小@end
#import"Density.h"@implementationDensity+(NSInteger)pixelsToDip:(float)pixels{return[[UIScreenmainScreen]bounds].size.width*pixels/320;}+(void)setWidth:(UIView*)viewcurrentView:(UIView*)currentViewpixels:(float)pixels{NSDictionary*childDis=NSDictionaryOfVariableBindings(currentView);NSIntegercurrentX=[DensitypixelsToDip:pixels];NSMutableDictionary*metrics=[[NSMutableDictionaryalloc]init];[metricssetObject:[NSStringstringWithFormat:@"%ld",(long)currentX]forKey:@"currentX"];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"[currentView(currentX)]"options:0metrics:metricsviews:childDis]];}+(void)setHeight:(UIView*)viewcurrentView:(UIView*)currentViewpixels:(float)pixels{NSDictionary*childDis=NSDictionaryOfVariableBindings(currentView);NSIntegercurrentX=[DensitypixelsToDip:pixels];NSMutableDictionary*metrics=[[NSMutableDictionaryalloc]init];[metricssetObject:[NSStringstringWithFormat:@"%ld",(long)currentX]forKey:@"currentX"];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"V:[currentView(currentX)]"options:0metrics:metricsviews:childDis]];}+(void)setSize:(UIView*)viewcurrentView:(UIView*)currentViewpixels:(float)pixels{NSDictionary*childDis=NSDictionaryOfVariableBindings(currentView);NSIntegercurrentX=[DensitypixelsToDip:pixels];NSMutableDictionary*metrics=[[NSMutableDictionaryalloc]init];[metricssetObject:[NSStringstringWithFormat:@"%ld",(long)currentX]forKey:@"currentX"];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"[currentView(currentX)]"options:0metrics:metricsviews:childDis]];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"V:[currentView(currentX)]"options:0metrics:metricsviews:childDis]];}+(void)setSize:(UIView*)viewcurrentView:(UIView*)currentViewxPixels:(float)xPixelsyPixels:(float)yPixels{NSDictionary*childDis=NSDictionaryOfVariableBindings(currentView);NSIntegercurrentX=[DensitypixelsToDip:xPixels];NSIntegercurrentY=[DensitypixelsToDip:yPixels];NSMutableDictionary*metrics=[[NSMutableDictionaryalloc]init];[metricssetObject:[NSStringstringWithFormat:@"%ld",(long)currentX]forKey:@"currentX"];[metricssetObject:[NSStringstringWithFormat:@"%ld",(long)currentY]forKey:@"currentY"];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"[currentView(currentX)]"options:0metrics:metricsviews:childDis]];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"V:[currentView(currentY)]"options:0metrics:metricsviews:childDis]];}+(void)setTextFont:(UILabel*)viewsize:(float)size{view.font=[UIFontfontWithName:@"Helvetica-Bold"size:[DensitypixelsToDip:size]];}+(void)setMutableSize:(UIView*)viewcurrentView:(NSDictionary*)currentViewxPixels:(float)xPixelsyPixels:(float)yPixels{NSIntegercurrentX=[DensitypixelsToDip:xPixels];NSIntegercurrentY=[DensitypixelsToDip:yPixels];NSMutableDictionary*metrics=[[NSMutableDictionaryalloc]init];[metricssetObject:[NSStringstringWithFormat:@"%ld",(long)currentX]forKey:@"currentX"];[metricssetObject:[NSStringstringWithFormat:@"%ld",(long)currentY]forKey:@"currentY"];for(NSString*keyincurrentView){NSString*vfl=[NSStringstringWithFormat:@"[%@(currentX)]",key];NSString*vflY=[NSStringstringWithFormat:@"V:[%@(currentX)]",key];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:vfloptions:0metrics:metricsviews:currentView]];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:vflYoptions:0metrics:metricsviews:currentView]];}}+(void)setMutableTextFont:(NSDictionary*)currentViewsize:(float)size{for(NSString*keyincurrentView){UILabel*label=[currentViewobjectForKey:key];label.font=[UIFontfontWithName:@"Helvetica-Bold"size:[DensitypixelsToDip:size]];}}+(void)setMutableWidth:(UIView*)viewcurrentView:(NSDictionary*)currentViewpixels:(float)pixels{NSIntegercurrentX=[DensitypixelsToDip:pixels];NSMutableDictionary*metrics=[[NSMutableDictionaryalloc]init];[metricssetObject:[NSStringstringWithFormat:@"%ld",(long)currentX]forKey:@"currentX"];for(NSString*keyincurrentView){NSString*vfl=[NSStringstringWithFormat:@"[%@(currentX)]",key];[viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:vfloptions:0metrics:metricsviews:currentView]];}}@end


最后贴个使用

[DensitysetSize:self.viewcurrentView:_logoxPixels:262yPixels:82];


更多相关文章

  1. android 自定义复合控件
  2. 重走Android路 之 挑几个基本控件玩玩(上卷)
  3. Android(安卓)自定义控件之滚动字幕条
  4. iPhone和Android的控件对比
  5. 关于Android滑动冲突的解决方法(二)
  6. Android:如何设置底部控件view随着软键盘的弹出而上移——诺诺"涂
  7. Android(安卓)UI总结 Android(安卓)和H5 字体大小适配
  8. 探究Android的多分辨率支持以及各种类型图标尺寸大小
  9. Android自定义控件系列案例【二】

随机推荐

  1. ListView特效2(列表拖拽)
  2. Android(安卓)自定义RadioButton的样式
  3. android让图片等比例缩放
  4. Android(安卓)为按键添加声音(转载)
  5. android之AIDL跨进程通信详解 (四)AIDL中
  6. 【Android(安卓)自定义控件】自定义View
  7. Android杀死正在运行的进程
  8. Http的请求方式
  9. Android中资源限定符hdpi large等的优先
  10. [Android环境搭建] 申请Android(安卓)Map