から継承するカスタム ビュー クラスがあり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
-propertyを設定する必要がありUILabel
myLabel
ます。幅は、使用可能な空き容量によって異なります。http://www.objc.io/issue-3/advanced-auto-layout-toolbox.htmlで、Auto Layout に最初に幅を計算させ、インスタンスpreferredMaxLayoutWidth
のフレームの後に設定できることを読みましたMyCustomView
(内側のラベルは現時点では一重です)が設定されています。
次の関数を に入れてMyCustomView
も、ラベルにはまだ 1 行のテキストがあります。
- (void)layoutSubviews
{
[super layoutSubviews];
float width = _myLabel.frame.size.width;
_myLabel.preferredMaxLayoutWidth = width;
[super layoutSubviews];
}
preferredMaxLayoutWidth
関数内で明示的な値を設定するとinit
、ラベルは複数行になります。
ここで私が間違っていることを誰かが知っていますか?
前もって感謝します!