2010-11-18 6 views
1

次は、基本的に問題を説明するために私の全体のプロジェクトです:のiOS - UITextAlignmentLeftクリップとUILabel積分記号の∫それはそのテキストの最初の文字である場合

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    UILabel *integralLabel = [[UILabel alloc]initWithFrame: CGRectMake(30, 60, 200, 150)]; 
    integralLabel.font = [UIFont systemFontOfSize:100]; 
    [window addSubview:integralLabel]; 
    integralLabel.text = @"∫∫∫"; 
    integralLabel.textAlignment = UITextAlignmentLeft; 
    integralLabel.backgroundColor = [UIColor yellowColor]; 
    [window makeKeyAndVisible]; 
    return YES; 
} 

ラベルの左端の積分記号がありますクリップされた。

これを解決する明確な方法はありますか?私のラベルの内容は、あらゆる種類の事柄に対応して頻繁に変わるので、私は何かハッキングしたくありません。

テキストは積分記号で始まる場合は、先頭にスペースを追加することができます

答えて

0

if ([[integralLabel.text substringToIndex:1]isEqualToString:@"∫"]) 
{ 
    integralLabel.text = [NSString stringWithFormat:@" %@", integralLabel.text]; 
} 

EDIT

ラベルで、この空間と他の空間を区別するためには、使用することができますスペースの異なるUnicode値(ここでは完全なリスト:http://www.cs.tut.fi/~jkorpela/chars/spaces.html

@"\u205F%@" 

等...

EDIT 2

またdrawTextInRect:をオーバーライドすることでUILabelをサブクラス化することができます。

- (void)drawTextInRect:(CGRect)rect 
{ 
    if (![[self.text substringToIndex:1]isEqualToString:@"∫"]) 
    { 
     [super drawTextInRect:rect]; 
    } 
    else 
    { 
     CGRect paddingLeftRect = CGRectMake(rect.origin.x + 25.0, rect.origin.y, rect.size.width, rect.size.height); 
     [super drawTextInRect:paddingLeftRect]; 
    } 
} 

これが役に立ちます。

+0

これは私が避けたいと思っているハックです。 。 。問題は、私たちがさまざまなラベルを扱っており、テキストが頻繁に変更される可能性があることです。今は、スペースがユーザーによって挿入された「実際の」スペースであるか、「仮想」スペースが挿入されたものであるかを追跡する必要があります書式設定などのために –

+0

私の編集を参照してください。あなたのラベルにあるかもしれない他のものを区別するために、異なる種類のスペースがあります。 –

+0

編集2を参照してください。UILabelをサブクラス化しました。 –

関連する問題