我正在定制UILabel
。我想要做的就是在UILabel
内设置自定义视图。我将标签的宽度和高度约束添加到大于100.现在当我将子视图添加到标签时,我想根据其子框架更新标签的框架。我怎样才能做到这一点?
任何帮助都会感激不尽。
答案 0 :(得分:0)
首先,将宽度和高度约束的优先级降低到800左右。然后,添加约束,使标签始终至少与其子视图一样高和宽:
[self.label addSubview:otherView];
[self.label addConstraints:
[NSLayoutConstraint
constraintsWithVisualFormat:@"|-0-[otherView]->=0-|"
options:0
metrics:nil
views:@{@"otherView" : otherView}]];
[self.label addConstraints:
[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-0-[otherView]->=0-|"
options:0
metrics:nil
views:@{@"otherView" : otherView}]];
答案 1 :(得分:0)
我已经实现了另一种方式。因为我正在寻找一种不需要处理约束的方法,它将按照配置的方式运行。为此,我有Derived UILabel并创建了自定义标签。然后我实施了addSubView
和intrinsicSize
方法,如下所示:
@implement MxCustomLabel
@synthesize dummyView;
- (void) addSubView:(UIView*)view
{
self.dummyView = view;
[self invalidateIntrinsicSize];
dispatch_async(dispatch_get_main_queue(), ^{
[super addSubView:view];
});
}
-(CGSize) intrinsicSize
{
return CGSizeMake(self.dummyView.frame.size.width, self.dummyView.frame.size.height);
}
@end
唯一需要注意的是在界面构建器中将Label的width
和height
约束设置为greater than or equal
。如果它设置为equals
,则此工具将遵守约束并且不会放大。但是,如果将高度或宽度设置为greater than or equal
,则此工具将扩展相应约束的大小。
以类似的方式,我们可以从UIView
派生的所有基本组件设计自定义组件。
虽然它有限制,它grow
来自center
的父UIView。我们无法控制增长的方向。如果这也可以实现那么它将是非常棒的。