1

非常にシンプルなカスタム フラット ボタンを作成しました。

@implementation HAFlatButton

+ (id)buttonWithColor:(UIColor *)aColor
{
    id button = [super buttonWithType:UIButtonTypeCustom];

    [button setFlatColor:aColor];

    CGRect frame = [button frame];
    frame.size.height = 200;
    [button setFrame:frame];

    return button;
}

+ (id)defaultButton
{
    return [HAFlatButton buttonWithColor:[HAColors buttonColor]];
}

- (void)setFlatColor:(UIColor *)flatColor
{
    _flatColor = flatColor;
    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = UIGraphicsGetCurrentContext();

    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:4.0];
    CGContextSaveGState(context);
    [path addClip];

    [_flatColor setFill];
    CGContextFillRect(context, rect);

    CGColorSpaceRelease(colorSpace);
}

@end

[HAFlatButton defaultButton] を使用して自動レイアウトにボタンを追加すると、ボタンのテキストよりわずかに高くなりますが、レイアウトに [UIButton buttonWithType:UIButtonTypeRoundedRect] を追加すると、ラベルの周りに適切なインセットが表示されます。

私は何を間違っていますか?

4

1 に答える 1

1

次の 1 つ以上を実行する必要があります。

高さ制限を追加します。

intrinsicSize の戻り値をオーバーライドします。

垂直コンテンツのハグの優先度を調整します。

于 2013-08-02T23:20:51.367 に答える