我有一个自定义视图类,它继承自UIView
. 这个类有一个UILabel
作为它的子视图。在init
这个自定义视图类的 -function 中,我设置了所有需要的东西,如下所示:
//h-file
#import <UIKit/UIKit.h>
@interface MyCustomView : UIView
@property (strong, nonatomic) UILabel *myLabel;
@end
//m-file
@implementation MyCustomView
@synthesize myLabel = _myLabel;
- (id)init
{
self = [super init];
if (self) {
_myLabel = [UILabel new];
if(_textView){
_myLabel.highlightedTextColor = [UIColor whiteColor];
_myLabel.translatesAutoresizingMaskIntoConstraints = NO;
_myLabel.lineBreakMode = NSLineBreakByWordWrapping;
_myLabel.numberOfLines = 0;
_myLabel.backgroundColor = [UIColor clearColor];
[self addSubview:_myLabel];
}
}
return self;
}
@end
我还设置了一堆约束来管理我的自定义视图中的填充 - 此外,MyCustomView
对于垂直轴和水平轴也有布局多个实例的约束。
要获得多行标签输出,我必须preferredMaxLayoutWidth
设置UILabel
myLabel
. 宽度取决于可用的可用空间。在http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html我读到,我可以让自动布局先计算宽度并将其设置为-instancepreferredMaxLayoutWidth
的框架之后(MyCustomView
里面的标签此时是单行的)已设置。
如果我将以下函数放入 中MyCustomView
,标签仍然有一行文本:
- (void)layoutSubviews
{
[super layoutSubviews];
float width = _myLabel.frame.size.width;
_myLabel.preferredMaxLayoutWidth = width;
[super layoutSubviews];
}
如果我preferredMaxLayoutWidth
在 -function 中将 设置为显式值init
,则标签是多行的。
有人知道我在这里做错了什么吗?
提前致谢!