UIToolbar中的UISegmentedControl颜色

Lut*_*ker 9 iphone uisegmentedcontrol uitoolbar

我的问题围绕着UINavigationBar与UIToolbar上的UISegmentedController的区别.如果我将UISegmentedControl放入导航栏,如下所示:

navigationBar.barStyle = UIBarStyleBlackTranslucent;
Run Code Online (Sandbox Code Playgroud)

一切都很好.UISegmentedControl使用稍暗的黑色标识所选选项.但是,如果我将UISegmentedControl放到UIToolbar上,它就不会从工具栏中获取颜色或半透明度.如果我手动设置tintColor,则UISegmentedControl不再区分selected和unselected.

不可否认,在放入UIToolbar之前,必须将UISegmentedControl包装在UIBarButtonItem中.我想知道这是否是UISegmentedControl看起来不正确的原因(半透明黑色背景上的蓝色).

toolbar.barStyle = UIBarStyleBlackTranslucent;
UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:segmentedControl]; 
NSArray *toolbarItems = [[NSArray alloc] initWithObjects:item,nil];
toolbar.items = toolbarItems;
Run Code Online (Sandbox Code Playgroud)

当然,由于我使用的是内部导航和控制器工具栏,但我的代码并不完整,但一般逻辑是相同的.我不确定如何使UIToolbar上的UISegmentedControl具有黑色半透明样式 - 在选定和未选定的段之间保持明显的区别.

ben*_*ord 7

似乎: segmentedController.tintColor = [UIColor darkGrayColor];解决您的问题.

要删除"依赖项",请继承UISegmentedControl并在构造函数中设置色调.

CustomSegmentedControl.m

- (id)initWithItems:(NSArray*)items {
    if( self = [super initWithItems:items] ) {
         self.tintColor = [UIColor darkGrayColor];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

  • 它不止于此.当我允许用户动态更改背景颜色方案时...屏幕上的所有100个CustomSegmentedControl实例都将是错误的颜色.您的方法要求我记住,跟踪和更新我自定义颜色的任何控件的每个实例.我正在寻找一些更优雅的东西...就像我上面描述的内置行为,UISegmentedControl根据UINavigationBar的样式自动变成蓝色或黑色或半透明.不幸的是,它似乎没有在UIToolbar上那样做. (2认同)