簡體   English   中英

UILabel動態內容自動大小麻煩

[英]UILabel Dynamic Content auto size trouble

請,我需要一些必須保存動態內容的UILabel的幫助。 它們包含在UIScrollView中。

根據屏幕方向,我無法讓它們正確調整大小。 我也希望保持它們之間的確切距離。 現在,我遇到了其中兩個(很多未來)的問題。

我正在使用以下代碼來調整它們的大小,但它沒有得到我預期的結果:

    - (void) updateLabelsPositionForPortrait
{
    summary_PersonalMonth.numberOfLines = 0;
    summary_PersonalDay.numberOfLines = 0;

    summary_PersonalMonth.frame = CGRectMake(summary_PersonalMonth.frame.origin.x,
                                             summary_PersonalMonth.frame.origin.y,
                                             summary_PersonalMonth.frame.size.width + 15,
                                             summary_PersonalMonth.frame.size.height);
    [summary_PersonalMonth sizeToFit];

    summary_PersonalDay.frame = CGRectMake(summary_PersonalDay.frame.origin.x,
                                           summary_PersonalDay.frame.origin.y + summary_PersonalMonth.bounds.origin.y + 10,
                                           summary_PersonalDay.frame.size.width + 15,
                                           summary_PersonalDay.frame.size.height);
    [summary_PersonalDay sizeToFit];

    [self updateScrollViewContentSize];
}

- (void) updateLabelsPositionForLandscape
{
    summary_PersonalMonth.numberOfLines = 1;
    summary_PersonalDay.numberOfLines = 1;

    summary_PersonalMonth.frame = CGRectMake(summary_PersonalMonth.frame.origin.x,
                                             summary_PersonalMonth.frame.origin.y,
                                             summary_PersonalMonth.frame.size.width,
                                             summary_PersonalMonth.frame.size.height);
    [summary_PersonalMonth sizeToFit];

    summary_PersonalDay.frame = CGRectMake(summary_PersonalDay.frame.origin.x,
                                           summary_PersonalDay.frame.origin.y - summary_PersonalMonth.bounds.origin.y - 10,
                                           summary_PersonalDay.frame.size.width,
                                           summary_PersonalDay.frame.size.height);
    [summary_PersonalDay sizeToFit];

}

我在shouldAutorotateToInterfaceOrientation中調用每個方法:在相應的方向。

if (UIInterfaceOrientationIsPortrait([UIDevice currentDevice].orientation))
{
    [self updateLabelsPositionForPortrait];
}
else
{
    [self updateLabelsPositionForLandscape];
}

結果如下:

  • 視圖加載的初始結果

視圖加載的初始結果

  • 在Landscape中旋轉后的結果

在Landscape中旋轉后的結果

  • 旋轉回肖像后的結果

旋轉回肖像后的結果

拜托,我需要建議!

謝謝 !

在NSArray中將所有標簽從頭到尾存儲起來。

現在制作一個根據方向設置標簽幀的功能:

-(void)setFramesOfLabel:(BOOL)flag
{
    if(flag) //portrait
    {
      int height = 20;
      int spaceBetweenLabels = 20;
      itn xspace = 20 //
    }
    else//landscape changes
    {
      int height = 20;
      int spaceBetweenLabels = 20;
      itn xspace = 20 /
    }
    int count = 0;
    for(UILabel *label in arrLabels)
    {
       NSString *strText = [arrTexts objectAtIndex:count]; //as u may having text array to fill in labels as i assume
       CGSize expectedLabelSize = [strText sizeWithFont:label.font constrainedToSize:maximumLabelSize lineBreakMode:UILineBreakModeWordWrap]; //

       CGrect *newFrame = CGRectMake(xspace,height,expectedLabelSize.width,expectedLabelSize.height);
       [label setFrame:newFrame];

        height += expectedLabelSize.height;
       count ++;
    }
    [scrollView setContentSize(scrollView.width,height)];
}

采用

if (UIInterfaceOrientationIsPortrait([UIDevice currentDevice].orientation))
{
  [self setFramesOfLabel:TRUE];
}
else
{    
  [self setFramesOfLabel:FALSE];
}

你似乎一遍又一遍地在同一幀上重新操作。 嘗試使用此代碼:

// Declare the below variables as globals
CGRect defaultRectPortrait = CGRectZero;
CGRect defaultRectLandscape = CGRectZero;

- (void) updateLabelsPositionForPortrait
{
    summary_PersonalMonth.numberOfLines = 0;
    summary_PersonalDay.numberOfLines = 0;

    if(defaultRectPortait == CGRectZero)
        defaultRectPortait = CGRectMake(summary_PersonalMonth.frame.origin.x,
                                             summary_PersonalMonth.frame.origin.y,
                                             summary_PersonalMonth.frame.size.width + 15,
                                             summary_PersonalMonth.frame.size.height);

    [summary_PersonalMonth setFrame:defaultRectPortrait];
    [summary_PersonalMonth sizeToFit];

    // Do a similar thing for summary_PersonalDay

    [self updateScrollViewContentSize];
}    

- (void) updateLabelsPositionForLandscape
{
    // Use similar logic for summary_PersonalMonth and summary_PersonalDay in landscape as well
}

最后:

if (UIInterfaceOrientationIsPortrait([UIDevice currentDevice].orientation))
{
    [self updateLabelsPositionForPortrait];
}
else
{
    [self updateLabelsPositionForLandscape];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM