4

から継承するカスタム ビュー クラスがあり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、ラベルは複数行になります。

ここで私が間違っていることを誰かが知っていますか?

前もって感謝します!

4

1 に答える 1

0

カスタム ビューに設定したすべての制約とそれを含むスーパービューを確認しないと、問題を特定するのが非常に困難です。 viewDidLayoutSubviews を表示し、ラベルとそのスーパービューに正しいフレーム セットがあるかどうかを判断します。

動的ラベル サイズとスクロール ビューで同様の問題が発生したため、ここでプロトタイプを作成しました

于 2013-10-07T03:59:13.030 に答える