2011-09-24 22 views
2

我正在嘗試爲設置尺寸的圖像周圍的文本創建一個「包裝」效果。準確無縫地將文本拆分爲兩個UILabels

  ___________ 
........| 
........| image 
label.1.| 
........|___________ 
.................... 
.......label.2...... 
.................... 
.................... 

這裏使用的是現在的方法IM:

- (NSArray *)splitString:(NSString*)str maxCharacters:(NSInteger)maxLength { //this will split the string to add to two UILabels 
    NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:1]; 
    NSArray *wordArray = [str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
    NSInteger numberOfWords = [wordArray count]; 
    NSInteger index = 0; 
    NSInteger lengthOfNextWord = 0; 

    while (index < numberOfWords) { 
     NSMutableString *line = [NSMutableString stringWithCapacity:1]; 
     while ((([line length] + lengthOfNextWord + 1) <= maxLength) && (index < numberOfWords)) { 
      lengthOfNextWord = [[wordArray objectAtIndex:index] length]; 
      [line appendString:[wordArray objectAtIndex:index]]; 
      index++; 
      if (index < numberOfWords) { 
       [line appendString:@" "]; 
      } 
     } 
     [tempArray addObject:line]; 
    } 
    return tempArray; 
} 

我給它的,我要分割的文字,這是第一個的UILabel的最大高度maxCharacters值。這種方法基本上就是我想要的,但有時第一個UILabel的最後一行比第一個UILabel和第二個UILabel之間留有間隔的「更高」。

這裏是我使用的方法:

NSArray *splitStringArray = [self splitString:eventRecord.summary maxCharacters:280]; 

    UILabel *firstSumValue = [[UILabel alloc] init]; 
    NSString *firstSumString = [splitStringArray objectAtIndex:0]; 
    CGSize maxFirstSumSize = CGSizeMake(185.0,150.0); 
    UIFont *firstSumFont = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12]; 
    CGSize firstSumStringSize = [firstSumString sizeWithFont:firstSumFont 
            constrainedToSize:maxFirstSumSize 
             lineBreakMode:firstSumValue.lineBreakMode]; 



    CGRect firstSumFrame = CGRectMake(10.0, presentedValue.frame.origin.y + presentedValue.frame.size.height, 185.0, firstSumStringSize.height); 


    firstSumValue.frame = firstSumFrame; 

    firstSumValue.font = [UIFont fontWithName:@"HelveticaNeue" size:12]; 
    firstSumValue.lineBreakMode = UILineBreakModeWordWrap; 
    firstSumValue.numberOfLines = 0 ; 
    [self.mainScrollView addSubview:firstSumValue]; 



    firstSumValue.text = [splitStringArray objectAtIndex:0]; 


    UILabel *secondSumValue = [[UILabel alloc] init]; 

    NSInteger isSecond = 0; //no 
    if([splitStringArray count] > 1){ 
     isSecond = 1; //yes 

     NSString *secondSumString = [splitStringArray objectAtIndex:1]; 
     CGSize maxSecondSumSize = CGSizeMake(310.0,9999.0); 
     UIFont *secondSumFont = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12]; 
     CGSize secondSumStringSize = [secondSumString sizeWithFont:secondSumFont 
               constrainedToSize:maxSecondSumSize 
                lineBreakMode:secondSumValue.lineBreakMode]; 



     CGRect secondSumFrame = CGRectMake(10.0, firstSumValue.frame.origin.y + firstSumValue.frame.size.height, 310.0, secondSumStringSize.height); 


     secondSumValue.frame = secondSumFrame; 

     secondSumValue.font = [UIFont fontWithName:@"HelveticaNeue" size:12]; 
     secondSumValue.lineBreakMode = UILineBreakModeWordWrap; 
     secondSumValue.numberOfLines = 0 ; 
     [self.mainScrollView addSubview:secondSumValue]; 


     secondSumValue.text = [splitStringArray objectAtIndex:1]; 


    } 

我如何把一切都一致和正確對齊。也許,有一個更好的方法可以推薦。不是核心文本,因爲它超出了我的知識範圍。

回答

1

請考慮使用UIWebView代替本地HTML文件中定義的佈局。它可以爲您節省很多頭痛,而不是嘗試手動處理複雜的佈局。

+0

如何用UIWebView來對抗半秒的加載延遲? – Liam