0

3 つの異なるラベルに関する情報を表示しようとしています。初め。タイトル 2。発売日 3. 説明

タイトルとリリース日の間には 2 行の空白行があります。タイトルが 3 行を超える場合は、発行日に記載されることがあります。これが写真です(太線はパブの日付ラベルです): タイトルはpubDateに取得されます

説明ラベルに大量のテキストが表示されると、次のことが起こります。 ここに画像の説明を入力

これはそのあるべき姿です:

ここに画像の説明を入力

質問: 1. タイトルと公開日の間に固定スペースを確保するにはどうすればよいですか? (タイトルが何行あっても、2 つの間に固定スペースが残ります) 2. 大量のテキストを取得すると、説明が下に移動するのはなぜですか? どうすれば彼の場所を固定できますか?

それぞれの行数に関係なく、3 つのラベル間のスペースを節約したいだけです。

これまでの私のコードは次のとおりです。

- (void)viewDidLoad
{


    [super viewDidLoad];

    [_scroller setScrollEnabled:YES];
    [_scroller setContentSize:CGSizeMake(320, 600)];


    self.lblDescription.text = self.description;
    self.lblTitle.text = self.stitle;
    self.lblPubDate.text = self.pubDate;


    self.lblTitle.numberOfLines = 0;
    [self.lblTitle sizeToFit];
    self.lblTitle.textAlignment = UITextAlignmentRight;
    CGRect titleFram = self.lblTitle.frame;
    titleFram = CGRectMake(titleFram.origin.x, titleFram.origin.y, 280, titleFram.size.height);
    self.lblTitle.frame = titleFram;

    self.lblDescription.numberOfLines = 0;
    [self.lblDescription sizeToFit];

    [self resizeHeightToFitForLabel:self.lblTitle];
    [self resizeHeightToFitForLabel:self.lblDescription];


}
-(void)resizeHeightToFitForLabel:(UILabel *)label
{
    CGRect newFrame         = label.frame;
    newFrame.size.height    = [self heightForLabel:label withText:label.text];
    label.frame             = newFrame;
}

-(CGFloat)heightForLabel:(UILabel *)label withText:(NSString *)text
{
    CGSize maximumLabelSize     = CGSizeMake(290, FLT_MAX);

    CGSize expectedLabelSize    = [text sizeWithFont:label.font
                                   constrainedToSize:maximumLabelSize
                                       lineBreakMode:label.lineBreakMode];

    return expectedLabelSize.height;
}

これを行うための最良の方法は何ですか?ありがとう..

4

4 に答える 4

2

この方法で試すことができます。

NSString *lbltext1 = lblTitle.text;
    NSString *lbltext2 = lblDate.text;
    NSString *lbltext3 = lblDesc.text;

CGRect rect = self.lblTitle.frame;
rect.size.height = [ViewController calculateHeightForText:lbltext1 font:self.lblTitle.font size:CGSizeMake(rect.size.width, 40000)].height;
self.lblTitle.frame = rect;

rect = self.lblDate.frame;
rect.origin.y = CGRectGetMaxY(self.lblTitle.frame) + 5;
rect.size.height = [ViewController calculateHeightForText:lbltext2 font:self.lblDate.font size:CGSizeMake(rect.size.width, 40000)].height;
self.lblDate.frame = rect;

rect = self.lblDesc.frame;
rect.origin.y = CGRectGetMaxY(self.lblDate.frame) + 5;
rect.size.height = [ViewController calculateHeightForText:lbltext3 font:self.lblDesc.font size:CGSizeMake(rect.size.width, 40000)].height;
self.lblDesc.frame = rect;

計算された高さのために、

+ (CGSize)calculateHeightForText:(NSString *)text font:(UIFont *)font size:(CGSize)size {
    CGSize _size = [text sizeWithFont:font constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap];
    return _size;
}
于 2013-04-18T10:03:30.830 に答える
0

以下のカスタムメソッドを使用してコンテンツの高さを計算します...

(float) calculateHeightOfTextFromWidth:(NSString*) text: (UIFont*)withFont: (float)width :(UILineBreakMode)lineBreakMode
{
[text retain];
[withFont retain];
CGSize suggestedSize = [text sizeWithFont:withFont constrainedToSize:CGSizeMake(width, FLT_MAX) lineBreakMode:lineBreakMode];

[text release];
[withFont release];

return suggestedSize.height;
}

次のように使用します。

UILabel *lblAddress = [[UILabel alloc]init];
[lblAddress setFrame:CGRectMake(110, 31, 200, 50)];        
lblAddress.text = @"your Text ";
lblAddress.lineBreakMode = UILineBreakModeWordWrap;
lblAddress.numberOfLines = 0;
lblAddress.font = [UIFont fontWithName:@"Helvetica" size:12];

lblAddress.frame = CGRectMake(lblAddress.frame.origin.x, lblAddress.frame.origin.y, 
                         200,[self calculateHeightOfTextFromWidth:lblAddress.text :lblAddress.font :200 :UILineBreakModeWordWrap] ); 

lblAddress.textColor = [UIColor darkGrayColor];

[self.view addSubview:lblAddress];

私のブログを見る...

于 2013-04-18T09:53:30.417 に答える
0

これを試して

 self.lblDescription.text = @"asdfasfadfsa";
    self.lblTitle.text = @"asdafsasf";
    self.lblPubDate.text = @"asdafsas";


    self.lblTitle.numberOfLines = 0;
    [self.lblTitle sizeToFit];
    self.lblTitle.textAlignment = UITextAlignmentRight;
    CGRect titleFram = self.lblTitle.frame;
    titleFram = CGRectMake(titleFram.origin.x, titleFram.origin.y, 280, titleFram.size.height);
    self.lblTitle.frame = titleFram;

    self.lblDescription.numberOfLines = 0;
    [self.lblDescription sizeToFit];

    [self resizeHeightToFitForLabel:self.lblTitle];

    CGRect pubFrame =self.lblPubDate.frame;
    pubFrame.origin.y= self.lblTitle.frame.origin.y+self.lblTitle.frame.size.height+110;

    [self.lblPubDate setFrame:pubFrame];

    CGRect descFrame =self.lblDescription.frame;
    descFrame.origin.y= self.lblPubDate.frame.origin.y+self.lblPubDate.frame.size.height+30;


    [self resizeHeightToFitForLabel:self.lblDescription];
于 2013-04-18T09:54:07.117 に答える