Storyboard 系列文章
[iOS] Storyboard (1) -- 入门:API 篇
[iOS] Storyboard (2) --入门:约束篇
[iOS] Storyboard (3) -- 使用:常用Tips
[iOS] Storyboard (4) -- 实践:问题总结
[iOS] Storyboard (4) -- 实践:UIScrollView
[iOS] Storyboard (4) -- 实践:UICollectionView
1. 无法隐藏 UITableView 的区头/区尾
在使用 UITableView
时,很多时候需要隐藏表的区头和区尾,如果设置的区头/区尾的高度为1没有效果,需要注意 Estimate
(预估) 是否为 0,如果不为0,是无法隐藏的:
2. 如何设置 GreenView.top = RedView.bottom
无论是使用面板或者连线,无法直接设置某个控件的top
等于另一个控件的bottom
,可以先添加一组约束,例如相等,两个控件可能会重合,然后编辑 GreenView
的 top
约束,修改为等于 RedView
的bottom
:
3. 在 Storyboard 面板设置自定义属性, IBInspectable
在属性面板并不能设置所有的属性, 例如自定义的属性, 默认不会在属性面板展示的; 但是我们可以通过添加属性修饰符 IBInspectable
来在面板中展示相关的属性设置;
这里以为 UIView
添加圆角和边框为例, 为此我写了一个分类, 添加了如下属性:
// UIView+corner.h
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIView (corner)
@property (nonatomic,assign) IBInspectable CGFloat cornerRadius;
@property (nonatomic,assign) IBInspectable CGFloat borderWidth;
@property (nonatomic,strong) IBInspectable UIColor *borderColor;
@end
NS_ASSUME_NONNULL_END
// UIView+corner.m
#import "UIView+corner.h"
@implementation UIView (corner)
- (void)setCornerRadius:(CGFloat)cornerRadius {
self.layer.cornerRadius = cornerRadius;
}
- (void)setBorderWidth:(CGFloat)borderWidth {
self.layer.borderWidth = borderWidth;
}
- (void)setBorderColor:(UIColor *)borderColor {
self.layer.borderColor = borderColor.CGColor;
}
- (CGFloat)cornerRadius {
return self.layer.cornerRadius;
}
- (CGFloat)borderWidth {
return self.layer.borderWidth;
}
- (UIColor *)borderColor {
return [UIColor colorWithCGColor:self.layer.borderColor];
}
@end
每个属性都添加了 IBInspectable
修饰符, 这时在Storyboard
或者 xib
中, 就会看到新加的这些属性:
这样就可以在面板中添加这些属性设置;
4. 在 Storyboard 中连线设置自定义控件代理
我们知道, 在 Storyboard
中添加的 UITableView
可以使用连线的方式添加代理对象, 那么我们自定义的一些控件代理是不是也可以这样设置呢?
答案是肯定, 只需要在代理属性中添加 IBOutlet
修饰即可;
这里我自定义了一个 View
, 添加了一个代理:
#import <UIKit/UIKit.h>
@protocol LQViewDeledate <NSObject>
@end
NS_ASSUME_NONNULL_BEGIN
@interface LQView : UIView
@property (weak, nonatomic) IBOutlet id <LQViewDeledate> delegate ;
@end
NS_ASSUME_NONNULL_END
在 Storyboard
中选中该控件, 右键即可添加连线:
前提是, 需要将此类指定为我们自定义的类: