35

これが非常に単純であることはわかっていますが、プログラムで UILabel を作成し、それを希望どおりに動作させるのに本当に苦労しています。

私が望むのは、ラベルを作成し、高さ、幅、フォントサイズの最大属性を設定してから、テキストを小さくする、および/またはテキストを切り捨てて、長いテキスト文字列に対応できるようにすることだけです。

ラベルに最大幅 380、最大高さ 20、最大フォント サイズ 12 のテキストを含めるとします。

そのため、このようなラベルを作成するために私が試みたのは次のとおりです。

UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(91, 15, 0, 0)];
fromLabel.text = [self fromSender];
fromLabel.font = [UIFont fontWithName:ProximaNovaSemibold size:12]; //custom font
fromLabel.numberOfLines = 1;
fromLabel.baselineAdjustment = YES;
fromLabel.adjustsFontSizeToFitWidth = YES;
fromLabel.adjustsLetterSpacingToFitWidth = YES;
fromLabel.size = [fromLabel.text sizeWithFont:fromLabel.font constrainedToSize:CGSizeMake(380, 20) lineBreakMode:NSLineBreakByTruncatingTail];
fromLabel.minimumScaleFactor = MIN_SCALE_FACTOR;
fromLabel.clipsToBounds = YES;
fromLabel.backgroundColor = [UIColor clearColor];
fromLabel.textColor = [UIColor blackColor];
fromLabel.textAlignment = NSTextAlignmentLeft;
[collapsedViewContainer addSubview:fromLabel];

わかりました、ラベルが表示されますが、テキストは 12 よりも大きく、高さは常に 21 になります!? 高さとテキスト サイズの値を極端なサイズに変更しても、このコードは調整できない固定サイズのラベルを作成します。小さくすることができる唯一のことは、幅です。

基本的なことを見過ごしているに違いありませんが、目的の結果を得る方法が本当にわかりません。また、取得している動作を取得する理由も理解できません。

4

8 に答える 8

57

以下は動作しますか?

UIFont * customFont = [UIFont fontWithName:ProximaNovaSemibold size:12]; //custom font
NSString * text = [self fromSender];

CGSize labelSize = [text sizeWithFont:customFont constrainedToSize:CGSizeMake(380, 20) lineBreakMode:NSLineBreakByTruncatingTail];

UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(91, 15, labelSize.width, labelSize.height)];
fromLabel.text = text;
fromLabel.font = customFont;
fromLabel.numberOfLines = 1;
fromLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines; // or UIBaselineAdjustmentAlignCenters, or UIBaselineAdjustmentNone
fromLabel.adjustsFontSizeToFitWidth = YES;
fromLabel.adjustsLetterSpacingToFitWidth = YES;
fromLabel.minimumScaleFactor = 10.0f/12.0f;
fromLabel.clipsToBounds = YES;
fromLabel.backgroundColor = [UIColor clearColor];
fromLabel.textColor = [UIColor blackColor];
fromLabel.textAlignment = NSTextAlignmentLeft;
[collapsedViewContainer addSubview:fromLabel];

編集: と の両方adjustsFontSizeToFitWidthを使用すると問題が発生する可能性があると思いますminimumScaleFactor。前者は、 a も設定する必要があると述べていますminimumFontWidth(そうしないと、私のテストによれば、まったく判読できないものに縮小する可能性があります) が、これは推奨されておらず、後者に置き換えられています。

edit 2 : 気にしないでください、古いドキュメント。adjustsFontSizeToFitWidthが必要minimumScaleFactorです。最小スケール ファクターとして 0 を渡さないようにしてください (整数除算、10/12 は 0 を返します)。値の小さな変更baselineAdjustmentも。

于 2013-07-23T14:49:17.230 に答える
3

スウィフト 3:

let label = UILabel(frame: CGRect(x:0,y: 0,width: 250,height: 50))
label.textAlignment = .center
label.textColor = .white
label.font = UIFont(name: "Avenir-Light", size: 15.0)
label.text = "This is a Label"
self.view.addSubview(label)
于 2017-05-05T07:10:50.980 に答える
2
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 30, 300, 50)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.numberOfLines = 0;
label.lineBreakMode = UILineBreakModeWordWrap;
label.text = @"Your Text";
[self.view addSubview:label];
于 2016-07-30T08:23:09.890 に答える
1
In Swift -

var label:UILabel = UILabel(frame: CGRectMake(0, 0, 70, 20))
label.center = CGPointMake(50, 70)
label.textAlignment = NSTextAlignment.Center
label.text = "message"
label.textColor = UIColor.blackColor()
self.view.addSubview(label)
于 2016-07-30T08:26:21.597 に答える
0

スイフト

var label = UILabel(frame: CGRect(x: 0, y: 0, width: 250, height: 50))
label.textAlignment = .left
label.text = "This is a Label"
self.view.addSubview(label)
于 2016-06-15T09:50:39.177 に答える