かなり大きなフォームを含むアプリがあります。UILabel をサブクラス化して、フォーム ラベルに一貫性を持たせました。ただし、いくつかのラベルは背景色のセクション区切りになる予定で、インデントが必要です。
このコードを使用してインスタンス化するときに、UILabel のインデント設定をオーバーライドできることはわかっています。
- (void)drawTextInRect:(CGRect)rect {
UIEdgeInsets insets = {0, 5, 0, 5};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
ただし、すべてのラベルにインセットが追加されます。私が欲しいものではありません。
だから私がしたことは、カスタムメソッドを書いたことです:
- (void) makeInsets
{
CGRect rect = self.frame;
if (hasInset) {
UIEdgeInsets insets = {0, 5, 0, 5};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
} else {
UIEdgeInsets insets = {0, 0, 0, 0};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
}
問題は、UILabel が描画された後に発生することです。試してみ[UILabelSubclass setNeedsDisplay:YES]
ましたが、メソッドに対して「可視インターフェイスがありません」というエラーが表示されますsetNeedsDisplay
。既存のインセットをカスタム インセットで上書きする方法はありますか?