2014-09-10 40 views
0

在IOS中繪製字符串時,默認情況下,文本以左上角爲基線。當使用多個具有相同y座標的不同字體大小的字符串時,這可能會導致問題。
Objective-C - 左下角的文本基線

問題;
我該如何baseline一個字符串由左下角的第一行

enter image description here

如何實現這一目標?

BR,

回答

2

我終於找到解決我的問題。
通過減去rect.origin.y的UIFont伸財產,我可以相對於基準的文字左下角。

援引伸屬性的UIFont文件:「頂部y座標,從基線偏移,接收器的最長伸的」

https://developer.apple.com/library/ios/documentation/uikit/reference/UIFont_Class/Reference/Reference.html#//apple_ref/occ/instp/UIFont/ascender

- (void)drawTextBaseLined:(NSString *)text 
        rect:(CGRect)rect 
        font:(UIFont *)font 
{ 
    if ([text length] == 0) return false; 

    NSDictionary *attributes = @{NSFontAttributeName : font}; 

    rect.origin.y -= font.ascender; 
    [text drawWithRect:rect 
      options:NSStringDrawingUsesLineFragmentOrigin 
      attributes:attributes 
      context:nil]; 
} 

這種方法將與一個或多個文本行,並用不同的字體大小工作。 我希望我的解決方案也能幫助別人。

BR,

0

使用- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context;

當你有你的標籤的高度只是做數學題,以選擇的權利起源於在同一個地方總是有下面左上角。

NSDictionary * attributes = @{NSFontAttributeName:[UIFont systemFont]}; 

CGRect rect = [[NSString string] boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil]; 

如果你想在下面左上角的標籤以50pix總是你的標籤的起源將在(50 - rect.size.height)。

更改尺寸以適應您的約束條件。

+0

我做了什麼,結果?我不知道如何垂直偏移文本,因此它基於第一行的左下角。 – 2014-09-10 18:56:59

+0

完整的代碼片斷,將不勝感激。 =)我不知道需要爲函數設置哪些選項或屬性。 – 2014-09-10 19:02:09

+0

函數返回的值爲不同的字體大小返回不同的結果。 實施例: 文本1的字體大小12在x = 200,Y = 400,將在x = 200,Y = 400,得到14.316 文本2的字體大小18的高度將產生的21.73999 一個高度減去此值text1和text2的y座標將較大的字體(text2)放在比較小的字體(400-14.316 vs 400-21.73999)更高的位置。我想要將左下角的text1和text2定位在y = 400。 – 2014-09-11 20:27:04

相關問題