有时候我们需要自己创建1像素的分割线。那么我们需要的point
为:
1.0f / [UIScreen mainScreen].scale
但是在storyboard中,视图的高度只能填写整数,更何况这里还需要动态变化。我们可以在代码里直接设置,但我还是想如果使用storyboard就尽量保持一致都用storyboard。在网上找到一个方法。就是使用IB_DESIGNABLE
和IBInspectable
。
IB_DESIGNABLE
IB_DESIGNABLE的宏的功能就是让XCode动态渲染出该类图形化界面。
IBInspectable
让支持KVC的属性能够在Attribute Inspector中配置。
我们对分割线的布局采用自动布局来做,把分割线的高度约束为1 point
。
然后新建一个继承自NSLayoutConstraint
的子类IBDesignableOnePixelConstant
,把分割线高度约束的类改为IBDesignableOnePixelConstant
。
源码为:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface IBDesignableOnePixelConstant : NSLayoutConstraint
@property (nonatomic) IBInspectable NSInteger onePixelConstant;
@end
#import "IBDesignableOnePixelConstant.h"
@implementation IBDesignableOnePixelConstant
- (void)setOnePixelConstant:(NSInteger)onePixelConstant
{
_onePixelConstant = onePixelConstant;
self.constant = onePixelConstant * 1.0 / [UIScreen mainScreen].scale;
}
@end
这样,在Attribute Inspector
就会多出一个配置选项 。
我们在One Pixel Constant
里面填写1。每次我们设置这个值都会在Identity Inspector
中改变一个User Defined Runtime Attributes
的KVC
变量。
通过这几个简单的步骤,我们就在storyboard中创建了1像素的分割线。
参考
iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新
How do I create a 1px line in Interface Builder?
网友评论