2017-08-31 73 views
-1

如何添加填充到UILabel而定位並帶有自動佈局調整其大小?到的UILabel添加填充在自動佈局

我試着子類,並重寫drawTextInRect:方法是這樣的:

- (void)drawTextInRect:(CGRect)rect { 

    CGFloat borderWidth = 5; 

    CGFloat doubleBigSquareRadius = CGRectGetWidth(rect); 
    CGFloat doubleSmallSquareRadius = doubleBigSquareRadius - borderWidth * 2; 

    CGFloat smallSquareSideSize = doubleSmallSquareRadius/sqrt(2); 
    CGFloat smallSquareOffset = (doubleBigSquareRadius - smallSquareSideSize)/2; 

    CGSize smallSquareSize = CGSizeMake(smallSquareSideSize, smallSquareSideSize); 
    CGPoint smallSquareOrigin = CGPointMake(smallSquareOffset, smallSquareOffset); 

    CGRect smallSquareFrame = CGRectMake(smallSquareOrigin.x, smallSquareOrigin.y, smallSquareSize.width, smallSquareSize.height); 

    [super drawTextInRect:smallSquareFrame]; 
} 

,但它並不會在所有調用。

回答

0

drawTextInRect:法的事實,KAProgressLabel直接調用super方法here引起。

0

,但它不會被調用。

也許是因爲你的標籤不是你的子類的實例?

這裏,開始與這個簡單的示例:

- (void)drawTextInRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextStrokeRect(context, CGRectInset(self.bounds, 1.0, 1.0)); 
    [super drawTextInRect:CGRectInset(rect, 5.0, 5.0)]; 
} 

你需要一個UILabel子類。在你的子類中實現它。然後確保你的的UILabel 該子類的一個實際的實例。 (如果您在筆尖創建標籤,則不會默認)。

(另請注意,自動佈局不會奇蹟般地知道此標籤的行爲與普通標籤的行爲不同,因此您可能需要必須重寫intrinsicContentSize,這取決於你的使用情況,以獲取標籤大小本身在你想要的方式。)

+0

實際上,我試圖修改[這個庫(https://github.com/kirualex/KAProgressLabel),所以我100%它是一個'KAProgressLabel'實例,而不是一個簡單的'UILabel'實例,如它不會顯示有色的進展。 –

+0

然後你不給足夠的信息,因爲我向你保證,說什麼作品。你需要在可下載項目中看到一個可用的例子嗎? – matt

+0

我會嘗試創建一個簡單的演示並嘗試重現它。 –