6

UILabel のテキストをインデントして、背景色を示すテキストの周りにマージンを残そうとしています。ここでの提案に従って、次のtextRectForBounds:limitedToNumberOfLines:ようにオーバーライドしました。

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
    CGRect intermediate = CGRectMake(bounds.origin.x+MARGIN,bounds.origin.y+MARGIN,bounds.size.width-2*MARGIN,bounds.size.height-2*MARGIN);
    return [super textRectForBounds:intermediate limitedToNumberOfLines:numberOfLines];
}

しかし、私が何をしても、テキストは四角形の左の境界線にぴったりとはまります。描画が返された CGRect の原点部分を無視しているように見えます (ただし、幅部分を尊重しているように見えますが、たとえばbounds.size.width-200、textRectForBounds が返す rect が適切に狭く、テキストが描画されるように中間の幅に縮小するかのように)細長い柱)。

では、図面が-returned-rect の origin.x と origin.yUILabelを尊重するようにするには、他に何をする必要がありますか? できれば'sをtextForRectBoundsオーバーライドしたくありません。UILabeldrawTextInRect

更新:これはずっと前のことで、他の質問がうまくいかなかった理由を正確に思い出せません。UILabel複数の行を使用しようとしていたためだと思いますが、その場合、ここでの解決策は機能しませんでした。

4

2 に答える 2

8

textRectForBounds:limitedToNumberOfLines:両方をオーバーライドして、次drawTextInRect:のようにする必要があると思います。

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
    return CGRectInset(bounds, MARGIN, MARGIN);
}

- (void)drawTextInRect:(CGRect)rect
{
    [super drawTextInRect: CGRectInset(self.bounds, MARGIN, MARGIN)];
}
于 2011-02-05T18:36:52.580 に答える
0

ドキュメントを確認してください、それはいくつかの助けになるかもしれません。superを呼び出すと、想定した値が返されない場合があります。

このメソッドを直接呼び出さないでください。このメソッドは、他の計算を実行する前に、レシーバーの境界矩形を変更するサブクラスによってのみオーバーライドする必要があります。numberOfLinesパラメーターの値を使用して、返される長方形の高さを指定されたテキスト行数に制限します。このメソッドを呼び出すには、sizeToFitまたはsizeThatFits:メソッドを事前に呼び出す必要があります。UITableViewCellオブジェクトのラベルは、要求されたサイズではなく、セルの寸法に基づいてサイズ設定されることに注意してください。このメソッドのデフォルトの実装は、元の境界の長方形を返します。

幸運を!

于 2011-02-05T18:44:33.160 に答える