UIButton内边距

4

是否有类似CSS的UIButton填充等效方法?

我发现小按钮使用起来有些困难,因此我想扩大按钮大小以便于点击。

我编写了一个解决方案代码来调整UIButton的大小,并使内容保持原样:

- (void)adjustButtonView:(UIButton *)button toSize:(CGSize)size
{
    CGRect previousFrame = button.frame;
    CGRect newFrame = button.frame;
    newFrame.size = size;
    CGFloat adjustX = (size.width - previousFrame.size.width)/2;
    CGFloat adjustY = (size.height - previousFrame.size.height)/2;
    newFrame.origin.x = previousFrame.origin.x - adjustX;
    newFrame.origin.y = previousFrame.origin.y - adjustY;
    button.frame = newFrame;

    UIEdgeInsets edgeInsets = UIEdgeInsetsMake(adjustY, adjustX, adjustY, adjustX);
    button.contentEdgeInsets = edgeInsets;
}

我想知道是否有更简单的方法扩展UIButtons。

3个回答

2

我认为你所做的方法已经是最简单的了。但我们可以通过将该方法移动到UIButton类别中来优化您的代码。

UIButton+Resize.h

@interface UIButton (Resize)

- (void)adjustToSize:(CGSize)size;

@end

UIButton+Resize.m

@implementation UIButton (Resize)

- (void)adjustToSize:(CGSize)size
{
    CGRect previousFrame = self.frame;
    CGRect newFrame = self.frame;
    newFrame.size = size;
    CGFloat adjustX = (size.width - previousFrame.size.width)/2;
    CGFloat adjustY = (size.height - previousFrame.size.height)/2;
    newFrame.origin.x = previousFrame.origin.x - adjustX;
    newFrame.origin.y = previousFrame.origin.y - adjustY;
    self.frame = newFrame;

    UIEdgeInsets edgeInsets = UIEdgeInsetsMake(adjustY, adjustX, adjustY, adjustX);
    self.contentEdgeInsets = edgeInsets;
}

@end

是的,我忘记把“button”改成“self”了。谢谢你提醒我。 - crawler

1

实际上,如果您不想使用子类化来扩展UIButtons的宽度,有一种非常简单的方法……尝试这样做:

[b setTitle:[NSString stringWithFormat:@"  %@  ", @"Title"] forState:UIControlStateNormal];

0

不,iOS 没有像 CSS 或样式表这样的东西,如果你想调整按钮大小,你必须手动设置框架。

为了自动化这个任务,你可以创建一个按钮并对其进行子类化,或者使用分类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接