2017-03-23 53 views
0

非常的新目標C,但我期待在現有的應用程序的源代碼,有很多在這裏通過篩選。如何創建中間有文字的水平線?

我試圖創造一些這樣的:

-------------- --------------或

...只能用實線代替破折號。

我定義爲這樣的「或」文本:

_orLabel = ^{ 
    UILabel* label = [[UILabel alloc] init]; 

    label.translatesAutoresizingMaskIntoConstraints = NO; 
    label.textColor = [UIColor blackColor]; 
    label.font = [UIFont mainFontWithSize:[UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline].pointSize]; 
    label.adjustsFontSizeToFitWidth = YES; 
    label.textAlignment = NSTextAlignmentCenter; 
    label.text = NSLocalizedString(@"or", nil); 

    [view addSubview:label]; 

    return label; 
}(); 

這是偉大的工作,讓「或」露面,但我不知道如何讓兩邊的水平線。

回答

1

我將繼承的UILabel和重寫drawTextInRect:。最簡單的方法是致電super,以便繪製文本。現在您仍處於圖形上下文(CGContext)中,因此您可以使用普通的Quartz繪圖命令繪製水平線。

+0

看我的書更多關於繪圖命令:http://www.apeth.com/iOSBook/ch15.html#_paths_and_drawing – matt

+0

另外這裏的首要'drawTextInRect的實際例子:';目標是不同的(即在標籤周圍放置一個盒子),但想法完全相同:http://www.apeth.com/iOSBook/ch10.html#_subclassing向下滾動到開始的段落「這是一個來自我自己的一個應用程序的例子,其中我分類UILabel「。 – matt

+0

當然,你可以走得更遠,只需自己畫一幅圖像,顯示一行,「or」和一行,並將其顯示爲UIImage或視圖的自繪圖。對於像這樣簡單的事情,您幾乎不需要UILabel。 – matt

0

最簡單的方法是利用某些Unicode字符,這將使你的實線。

label.text = @"───────── or ─────────"; 

該文字正在使用一系列「BOX LIGHT HORIZONTAL」字符(U + 2500)。

+0

這應該在某些情況下工作,但有點不合理 - 如果您有特定的寬度限制,字符不是任意可截斷的,並且可能難以確保線在比例字體中的長度相同。也不是所有的字體都有盒子繪製字符。 –

0

我會用IB在標籤的每一面添加一個視圖。使視圖有1或2與黑色背景的高度,並使用自動佈局,使它們的大小適當的標籤和屏幕的情況:

  1. 製作視圖#1固定在屏幕和左邊緣標籤的右側。
  2. 將視圖#2錨定到屏幕的右邊緣和標籤的左側。
  3. 使2個視圖和標籤具有相同的垂直中心。