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

How to draw a border around an NSTexturedSquareBezelStyle button

提问人:miken32 提问时间:4/23/2015 最后编辑:Joshua Nozzimiken32 更新时间:5/2/2015 访问量:494

问:

前几天我注意到我的一个网页看起来很丑。页面上的按钮看起来完全不同,具体取决于它们是否包含一行或两行文本。

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

在找到已经提交的错误并做了一些阅读后,我建议他们也许可以使用。事实证明,在 Mavericks 中,它看起来几乎与按钮完全相同。优胜美地也一样,只是它没有边界。更改没有效果。NSTexturedSquareBezelStyleNSRoundedBezelStylesetBordered

因此,我代表各地的浏览器开发人员提出问题:是否可以绘制带有边框的 NSTexturedSquareBezelStyle 按钮?或者,有没有其他方法,所有浏览器供应商都错过了?

Objective-C macOS

评论


答:

3赞 Joshua Nozzi 5/1/2015 #1

重写的答案

我没有看到一个按钮在优胜美地中显示无边框:NSTexturedSquareBezelStyle

NSTexturedSquareButonStyle button under Yosemite.

这是从 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";

证明:

Same button created with code.

如果您在 Yosemite 下看到不同的结果,则需要发布您的代码。据推测,您可能正在使用 而不是 来初始化您的按钮,这可能会导致各种绘图问题,因为 是 ,因此其指定的初始值设定项是 。不过只是一个猜测。-init-initWithFrame:NSButtonNSView-initWithFrame:

评论

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