如何自定义UISegmentedControl字体颜色和UIToolbar渐变?

发布于 2024-12-06 18:30:27 字数 881 浏览 4 评论 0原文

看来Apple的UIToolbar和您可以放置​​在其上的一些控件(例如UISegmentedControl)允许非常有限的自定义。例如,我们希望我们的工具栏看起来像这样的模拟:

工具栏截图

但是,UIToolbar只有一个 tintColor 和 3 个可以应用于它的内置 barStyle 值,因此我们无法获得我们想要的渐变。有没有像许多其他控件一样设置背景图像的方法?

更糟糕的是,UISegmentedControl 不允许您指定字体或字体颜色。它似乎强制使用带有阴影的白色 11pt Helvetica,而我们使用的浅色 tintColor 几乎无法读取白色。

我不想重写 UISegmentedControl 只是为了更改文本颜色。但我见过的唯一解决方案 非常老套——它会深入子视图的子视图并更改这些子视图的属性——每当苹果想要更改或禁止它时,它似乎就会停止工作。

苹果真的反对我们改变分段控件上的文本颜色吗?还是我在这里遗漏了一些东西?

更新: Apple终于在iOS 5中添加了自定义外观的功能。请参阅jfortmann的回答

It seems Apple's UIToolbar and some of the controls you can place on it, such as UISegmentedControl, allow very limited customization. For example, we want our toolbar to looks something like this mock:

toolbar screenshot

However, UIToolbar only has a single tintColor and 3 built-in barStyle values that you can apply to it, so we can't get the gradient we're after. Is there some way to set the background image like many of the other controls?

Even worse, the UISegmentedControl doesn't let you specify font or font color. It seems to enforce white 11pt Helvetica with a drop shadow, and the white is almost unreadable with the light tintColor we're using.

I'd hate to rewrite UISegmentedControl just to change the text color. But the only solution I've seen is very hacky -- it digs into the subviews of the subviews and changes properties on those -- seems likely to stop working whenever Apple feels like changing or disallowing it.

Is Apple really against us changing the text color on our segmented controls, or is there something I'm missing here?

Update: Apple finally added functions for customizing appearance in iOS 5. See jfortmann's answer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷离° 2024-12-13 18:30:27

您想要使用 setBackgroundImage:forState:barMetrics: 方法(可能在您的外观代理上)来设置背景图像。可以使用 setTitleTextAttributes:forState: 修改文本。最后,您需要使用 setDividerImage:... 更改可能状态的分隔符

。文档对于图像的外观提供了非常丰富的信息。

You want to use the setBackgroundImage:forState:barMetrics: methods (probably on your appearance proxy) to set the background image. The text can be modified with setTitleTextAttributes:forState:. And finally, you'll need to change the divider for the possible states with setDividerImage:...

The docs are very informative as to how the images have to look.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文