iOS开发中使用xib和storyboard可以节约大量的写UI代码的时间。这也是苹果官方比较推荐的方式。不过使用IB的方式来布局页面难免遇到一些需要设置圆角(cornerRadius)、阴影(shadowRadius)、边框(borderColor、borderWidth)这些不能直接在xib中设置的参数。还有一些自定义的view的一些参数。

原来呢,我是把这些控件拖到代码里面,在合适的时机用代码来设置这些参数,这样的话既要IB又要代码,感觉不舒服。或者是在identity inspector中设置user defined runtime attributes 。如下图:

EFDBF843-245C-49A1-B976-A6F98A16BD93.png

感觉还是很不方便,每个控件都要单独设置一次,麻烦!!!

接下来说重点 IBInspectable

举个例子,好多控件都可能会设置圆角,UIView、UIButton、UILable、UIImageView等等。

我们可以写一个这样的分类

//

// UIView+ForXIB.h

// OTTPos

//

// Created by Lipengxuan on 3/12Tuesday.

// Copyright © 2019 OTTPay. All rights reserved.

//

#import

NS_ASSUME_NONNULL_BEGIN

@interface UIView (ForXIB)

@property (nonatomic, assign) IBInspectable CGFloat fx_radius;

@property (nonatomic, assign) IBInspectable CGFloat fx_borderWidth;

@property (nonatomic, assign) IBInspectable BOOL fx_masksToBounds;

@property (nonatomic, assign) IBInspectable UIColor *fx_borderColor;

@end

NS_ASSUME_NONNULL_END

//

// UIView+ForXIB.m

// OTTPos

//

// Created by Lipengxuan on 3/12Tuesday.

// Copyright © 2019 OTTPay. All rights reserved.

//

#import "UIView+ForXIB.h"

#import

@implementation UIView (ForXIB)

-(void)awakeFromNib{

[super awakeFromNib];

self.layer.cornerRadius = self.fx_radius;

self.layer.masksToBounds = self.fx_masksToBounds;

self.layer.borderColor = self.fx_borderColor.CGColor;

self.layer.borderWidth = self.fx_borderWidth;

}

// MARK: - ================ Setters ===========================

static NSString *fx_radiusKey = @"fx_radius";

-(void)setFx_radius:(CGFloat)fx_radius{

objc_setAssociatedObject(self, &fx_radiusKey, @(fx_radius), OBJC_ASSOCIATION_COPY);

}

static NSString *fx_borderColorKey = @"fx_borderColor";

-(void)setFx_borderColor:(UIColor *)fx_borderColor{

objc_setAssociatedObject(self, &fx_borderColorKey, fx_borderColor, OBJC_ASSOCIATION_COPY);

}

static NSString *fx_borderWidthKey = @"fx_borderWidth";

-(void)setFx_borderWidth:(CGFloat)fx_borderWidth{

objc_setAssociatedObject(self, &fx_borderWidthKey, @(fx_borderWidth), OBJC_ASSOCIATION_COPY);

}

static NSString *fx_masksToBoundsKey = @"fx_masksToBounds";

-(void)setFx_masksToBounds:(BOOL)fx_masksToBounds{

objc_setAssociatedObject(self, &fx_masksToBoundsKey, @(fx_masksToBounds), OBJC_ASSOCIATION_COPY);

}

// MARK: - ================ Getters ===========================

-(CGFloat)fx_radius{

return [objc_getAssociatedObject(self, &fx_radiusKey) floatValue];

}

-(UIColor *)fx_borderColor{

UIColor *c = objc_getAssociatedObject(self, &fx_borderColorKey);

return c ;

}

-(CGFloat)fx_borderWidth{

return [objc_getAssociatedObject(self, &fx_borderWidthKey) floatValue];

}

-(BOOL)fx_masksToBounds{

return [objc_getAssociatedObject(self, &fx_masksToBoundsKey) boolValue];

}

@end

来看看storyboard中的效果:

40DA9592-0C05-45CD-A5B0-2986CB6529A8.png

再来看看运行效果:

0EA0922C-C34C-43EB-B1C6-8AD562F81306.png

OK,大功告成。

当然不写分类,uiview、uitextfield、uibutton等等的子类也可以用同样方法处理。

xib 设置阴影_使用“IBInspectable”XIB设置圆角、边框、阴影相关推荐

  1. 相机参数设置程序_自定义拍摄模式怎么设置?教你学会相机设置。

    相机的模式转盘上,除了基本的全自动.程序自动.光圈/快门优先.手动.B门等拍摄模式,还有自定义拍摄模式,对于拍摄有哪些作用?该如何设置自定义拍摄模式呢? 一.自定义拍摄模式的作用 自定义拍摄模式,可以 ...

  2. burp爆破线程设置多少_多线程到底需要设置多少个线程?

    我们在使用线程池的时候,会有两个疑问点: 线程池的线程数量设置过多会导致线程竞争激烈 如果线程数量设置过少的话,还会导致系统无法充分利用计算机资源 那么如何设置才不会影响系统性能呢?其实线程池的设置是 ...

  3. 广告牌定时器怎么设置时间_定时开关如何设置时间呢

    路灯定时开关怎么设置定时 内容如下:1.先按取消键5秒就可解锁设置2.如果有设置,先选择,然后选择校时,校分,这个是开:3.再次按设置,校时,校分,第一组就设置完成.以此类推下去就行.4.选择自动,或 ...

  4. CSS / 圆角边框+阴影+浮动

    目录 圆角边框 盒子阴影 文字阴影 传统网页布局的三种方式 浮动 浮动特性 浮动元素经常和标准流父级搭配使用 常见的网页布局案例 浮动布局注意点 圆角边框 语法:border-radius: 半径; ...

  5. html tr加阴影,table tr分离并加圆角和阴影

    table{ border-collapse:separate; border-spacing:0 20px;} td{ box-shadow:/*-5px 0 5px rgba(0,0,0,.3), ...

  6. html的边框阴影的代码是什么,CSS中边框阴影(box-shadow)的实现方法介绍(代码示例)...

    本篇文章分享的内容是CSS实现边框阴影的方法,内容很详细,有需要的朋友可以参考一下. 我们为边框添加阴影需要的是box-shadow属性,下面我们来看看box-shadow属性有哪些语法格式 box- ...

  7. 设置最大值_电机变频器参数设置不当会怎样

    我们知道变频器驱动电机运行是需要设置参数的,包括变频器运行控制模式如启动.停止,频率给定的命令来源,变频器频率的上下限.加减速等等参数都要根据实际情况来正确的设置. 控制模式与接线方式的不统一造成的, ...

  8. xml 里设置变量_[技巧] ApiPost操作设置

    ApiPost设置介绍和作用 一.默认请求超时时间 ApiPost默认设置的是25000毫秒,就是在25秒钟之内响应没有成功的话就默认失败,我们也可以自定义设置8秒或者10秒. 二.默认请求Metho ...

  9. 网上有打印按键怎么设置下载_打印机共享怎么设置 如何设置打印机共享【详细攻略】...

    打印机共享怎么设置?如何设置打印机共享?要实现两台打印机或者是多台打印机共享,首先要了解如何设置并共享局域网内已连接好电脑的打印机,之后需要解决的是局域网内其它电脑如何找到刚才那台电脑共享出去的打印机 ...

最新文章

  1. cmd指令大全指令_Linux 超全实用指令大全 | CSDN 博文精选
  2. Python 列表 insert() 方法
  3. Xamarin XAML语言教程使用使用Progress属性设置当前进度
  4. Qt::AutoConnection 信号从不同于接收者的thread发出时是queued 方式触发
  5. cuba 平台_CUBA平台正在开源
  6. sklearn——决策树
  7. mysql数据库开发常见问题及优化
  8. Android(java方法)上实现mp4的分割和拼接 (一)
  9. 随机向量x的协方差阵_【科普】如何正确理解特征值与特征向量
  10. developerDiskImage文件提取
  11. 浅析计算机科学在经济犯罪中的特征与表现
  12. 帆软获取单元格值与赋值
  13. Fortran入门教程(九)——文件
  14. 【转载】APP通用测试用例大全
  15. CentOS 7 : 一 、安装WeKan
  16. 在FME中的使用正则表达式之向前看向后看(前瞻后顾)
  17. 2021牛客练习赛90
  18. 一个简单的2DRoguelike游戏随机地图生成思路
  19. react基于WOW.js和Animate.css实现特定位置的动画执行
  20. CNN网络实现手写数字(MNIST)识别 代码分析

热门文章

  1. android xml 删除控件,android-cordova插件rm cordova-plugin-whitelist不会更改config.xml,因此在构建时将被读取...
  2. oracle视图的同义词,oracle 视图、同义词、序列
  3. 看懂类图——UML类图基础
  4. C# 如何用代码触控件的事件
  5. mysql5.7 部署文档-rpm
  6. 算法竞赛注意事项(废话)
  7. 从Zero到Hero,OpenAI重磅发布深度强化学习资源
  8. LInux下装jdk
  9. ORB-SLAM(四)追踪
  10. 标准配置的UBUNTU 11.10 RUBY VMWARE 镜像,手工MOD(ZSH_RVM_RAILS_VIM)