如何在NSTexturedSquareBezelStyle按钮周围绘制边框

9

我最近注意到我的一个网页看起来很丑。页面上的按钮根据它们包含的文本行数而看起来截然不同

经过一番调查,我了解到典型的按钮使用NSRoundedBezelStyle,但其高度固定。因此,如果文本需要换行,Firefox(和Chrome和Safari)将更改按钮使用NSShadowlessSquareBezelStyle,它可以具有可变高度。我想请求这些浏览器的维护者更改这个,并正在研究最佳替代方案。

在找到已提交的错误并进行一些阅读后,我建议他们可以改用NSTexturedSquareBezelStyle。结果发现,在Mavericks中,它几乎与NSRoundedBezelStyle按钮完全相同。在Yosemite中也是如此,只是没有边框。更改setBordered没有效果。

因此,我代表所有浏览器开发人员提出问题:是否有可能绘制带有边框的NSTexturedSquareBezelStyle按钮?或者,是否有其他方法可以解决所有浏览器厂商都忽略的问题?
1个回答

3

改写后的答案

我在Yosemite中没有看到一个无边框的NSTexturedSquareBezelStyle按钮:

Yosemite下的NSTexturedSquareButonStyle按钮。

这是从Interface Builder的调色板中拖出的原始按钮。如果您是通过代码生成按钮,我建议您发布您的代码。以下是我自己生成相同按钮的代码:

NSButton * anotherButton = [[NSButton alloc] initWithFrame:NSMakeRect(10.0, 10.0, 100.0, 100.0)];
anotherButton.bezelStyle = NSTexturedSquareBezelStyle;
anotherButton.title = @"Line 1\nLine 2";

证明:

使用代码创建的相同按钮。

如果您在Yosemite下看到不同的结果,您需要发布您的代码。猜测一下,您可能正在使用-init而不是-initWithFrame:初始化您的按钮,这可能会导致各种绘图问题,因为NSButton是一个NSView,因此它的指定初始化程序是-initWithFrame:。只是一个猜测。


有一个非常微小的边框,但不足以在白色背景或浅色图像上提供对比度。在Mavericks中,这个按钮看起来就像一个普通的按钮,这正是我所希望的。令人沮丧的是,苹果公司在他们的API中没有解决这样一个明显的限制。 - miken32
当然,除了能够子类化按钮单元并覆盖其绘制之外。;-) - Joshua Nozzi

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