如何在 NSTexturedSquareBezelStyle 按钮周围绘制边框
Posted
技术标签:
【中文标题】如何在 NSTexturedSquareBezelStyle 按钮周围绘制边框【英文标题】:How to draw a border around an NSTexturedSquareBezelStyle button 【发布时间】:2015-04-22 19:03:28 【问题描述】:前几天我注意到我的一个网页看起来很丑。页面上的按钮看起来像 totally different,取决于它们是否包含一行或两行文本。
经过一番挖掘,我了解到典型的按钮使用NSRoundedBezelStyle
,但它具有固定的高度。因此,如果文本要换行,Firefox(以及 Chrome 和 Safari)将 change the button to use NSShadowlessSquareBezelStyle
可以具有可变高度。我想请求这些浏览器的维护者改变这一点,并正在研究最好的替代方案。
在找到already-filed bug 并做了一些阅读后,我建议他们也许可以改用NSTexturedSquareBezelStyle
。事实证明,在 Mavericks 中,它看起来与 NSRoundedBezelStyle
按钮几乎完全相同。在优胜美地也是一样,只是它没有边界。更改setBordered
无效。
所以我代表各地的浏览器开发人员提出问题:是否可以绘制一个带边框的NSTexturedSquareBezelStyle
按钮?或者,是否有其他所有浏览器供应商都错过的解决方法?
【问题讨论】:
【参考方案1】:重写答案
我在 Yosemite 中没有看到无边框的 NSTexturedSquareBezelStyle
按钮:
这是一个从 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 中,这个按钮看起来就像一个普通的按钮,这正是我所希望的。令人沮丧的是,Apple 没有在其 API 中解决如此明显的限制。 当然,除了能够对按钮单元进行子类化和覆盖其绘图之外。 ;-)以上是关于如何在 NSTexturedSquareBezelStyle 按钮周围绘制边框的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?