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

mik*_*n32 9 macos cocoa objective-c

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

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

在找到已经提交的错误并进行一些阅读后,我建议也许他们可以使用NSTexturedSquareBezelStyle.事实证明,在小牛队中,它看起来几乎与NSRoundedBezelStyle按钮完全相同.优胜美地也是如此,但它没有边界.改变setBordered没有效果.

所以我的问题,代表各处的浏览器开发人员:是否可以绘制NSTexturedSquareBezelStyle带边框的按钮?或者,是否存在所有浏览器供应商错过的另一种方法?

Jos*_*zzi 3

重写的答案

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

优胜美地下的 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";
Run Code Online (Sandbox Code Playgroud)

证明:

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

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