2015-11-18 1 views
0

У меня проблема с лицом при установке другого типа шрифта и цвета в одном UILable с использованием атрибута. Моя проблема заключается в том, как получить точную высоту таблицы, поэтому я обеспечил высоту до высоты ячеек и поддерживал мой пользовательский интерфейс и текст, не разрезанный.Как вычислить высоту UILabel, если мы установили разные типы NSFontAttributeName в UILabel?

меня попробовать следующие вещи: КОД:

 int italicHeight = [AppSingletonObj get_LblHeight:strJoin withWidth:270 withFont:_SETITALICFONT(14.0)]; 

    int normalTextHeight = [AppSingletonObj get_LblHeight:strCmt withWidth:270 withFont:_SETREGULARFONT(14.0)]; 

    int cellheight = italicHeight+normalTextHeight; 

Когда я установить рамку на UILabel в то время я использовал ниже код

=========== ================================================== ===

int heightlbl = [AppSingletonObj get_LblHeight:strJoinTime withWidth:lblnotifyDesWidthAnswerQues withFont:_SETREGULARFONT(14.0)]; 

======================================== ===============

Если я вычислил разную высоту и установил эту высоту для метки, тогда высота будет больше, а текст не подходит для вертикального центра.

================================================================================================================================== ==========

- (CGFloat)get_LblHeight:(NSString*)str withWidth:(CGFloat)width withFont:(UIFont *)uiFont { 

     @try 
     { 
      // Get text 
      CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0); 
      CFAttributedStringReplaceString (attrString, CFRangeMake(0, 0), (CFStringRef) str); 
      CFIndex stringLength = CFStringGetLength((CFStringRef) attrString); 

      // Change font 
      CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef) uiFont.fontName, uiFont.pointSize, NULL); 
      CFAttributedStringSetAttribute(attrString, CFRangeMake(0, stringLength), kCTFontAttributeName, ctFont); 

      // Calc the size 
      CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString); 
      CFRange fitRange; 
      CGSize frameSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, 0), NULL, CGSizeMake(width, CGFLOAT_MAX), &fitRange); 

      CFRelease(ctFont); 
      CFRelease(framesetter); 
      CFRelease(attrString); 

      return frameSize.height +05; 
     } 
     @catch (NSException *exception) 
     { 
      NSLog(@"Exception heightEmoji = %@",[exception description]); 
     } 
    } 

================================= ====================

enter image description here

ответ

0

Дайте ярлыку текст, а затем вычислить кадр и назначить этот кадр на этикетке.

CGRect labelSize = [label.text boundingRectWithSize:CGSizeMake(label.frame.size.width, self.view.frame.size.height) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:@"font name" size:size]} context:nil]; 
0

Попробуйте это решение:

UILabel height calculation

Это на быстры, но я думаю, что вы можете преобразовать его в Objective-C

Смежные вопросы