Tag: uiappearance

我如何使用UIAppearance管理我的应用主题(第1/2部分)

在第一部分中,我将解释动机,方法和定义我使用的对象。 在第二部分中,我将更深入地研究与UIKit API交互的ThemeManager对象及其在应用程序中的使用方式。 最近,我添加了更改应用程序“电视流”主题的可能性,这是最终结果: 为了以一种容易,可维护和可自定义的方式进行操作,我使用了UIKit中的UIAppearance。 该协议具有一些方法,这些方法使您可以更改几个UIKit组件的外观,例如UINavigationBar,UIBarButtonItem等。 此外,您可以对其进行自定义,以便仅当该组件包含在其他组件类型中时更改外观。 由于视图遵循树结构,因此当UIBarButtonItem位于UINavigationBar或UIToolbar内部时,可以选择具有不同的外观。 阅读完Apple文档后,我发现Ray Wenderlich的教程和Abhimuralidharan的教程很有用。 我还以Siesta示例应用程序中的代码为起点。 我使用以下对象来管理主题: ThemeName (枚举):以独特的方式列出所有可能的主题; 主题 (协议):定义定义主题所需的所有属性; LightTheme,DarkTheme,BlackTheme (结构):符合主题协议并实现主题变体; ThemeRepository (协议):摘要如何加载和保存主题; DefaultsThemeRepository (类):使用标准的UserDefaults保存和加载主题; ThemeManager (类):返回当前主题并应用不同的主题,使用存储库检索当前主题并保存所应用的主题;

与UIAppearance和UIButton子类的麻烦

我有一个自定义button,这只是一个标准的UIButton,但添加了C​​AGradientLayer。 在我的自定义button中,我定义了两个属性: @property (nonatomic, strong) UIColor* topColor UI_APPEARANCE_SELECTOR; @property (nonatomic, strong) UIColor* bottomColor UI_APPEARANCE_SELECTOR; 如果这两个值被设置,我的button绘制一个很好的线性渐变。 很好用。 我也喜欢尽可能多的使用InterfaceBuilder。 因此,在这些button的某些button上,在IB的“身份检查器”中,我为这些属性添加了“用户定义的运行属性”。 再一次,伟大的作品。 接下来,我想我会尝试使用UIAppearance代理。 我的大多数自定义渐变button都具有相同的颜色。 但是有一些是不同的。 所以,我想我会做的是使用外观代理的东西来设置这个类的默认颜色,然后对于不同的button,我可以在IntefaceBuilder中设置它们的值。 这失败了。 显然,发生的事情是它首先从故事板文件中读取运行时属性,但之后这些值被外观代理覆盖。 我不希望这样做,但它确实如此。 任何提示如何做到这一点? 或者我应该放弃运行时属性的东西?

外观代理服务器不按照UIButton字体的预期工作

即时通讯目前通过外观代理样式我的应用程序,我遇到了这个问题:当我在UIButton外观设置属性我的字体被忽略: [buttonAppearance setTitleColor:darkColor forState:UIControlStateNormal]; [buttonAppearance.titleLabel setFont:[UIFont fontWithName:@"Helvetica Neue" size:10.0]]; 第一行正确应用(darkColor是一些UIColor),但我的字体更改被完全忽略。 当我复制行到我的ViewController,并将其应用于具体的button,它工作正常。 我错过了什么? 任何帮助赞赏! TY

UINavigationBar外观和Facebook的表错误

我在我的appdelegate中使用下面的代码: UINavigationBar *navigationBar = [UINavigationBar appearance]; [navigationBar setBackgroundImage:[[UIImage imageNamed:@"top_bar"] stretchableImageWithLeftCapWidth:5 topCapHeight:5] forBarMetrics:UIBarMetricsDefault]; [navigationBar setBackgroundImage:[[UIImage imageNamed:@"top_bar_scape"] stretchableImageWithLeftCapWidth:5 topCapHeight:5] forBarMetrics:UIBarMetricsLandscapePhone]; 一切工作正常,但我有一个奇怪的错误,当我打开iOS6的Facebook共享表,并打开观众列表(或专辑列表无关紧要):导航栏与我的top_bar-Image呈现。 请参阅以下屏幕: < – 正常没有我的外观变化 我的外观改变了 任何想法如何避免这个错误? 谢谢! 🙂

如何从默认的蓝色为MFMailComposeViewController的UIBarButtonItems的颜色?

无论我看起来如何尝试,在用户select通过电子邮件发送链接(这是一个MFMailComposeViewController )时出现的电子邮件屏幕中,button始终是默认的蓝色。 我在我的AppDelegate中有这个: [[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:0.000 green:156/255.0 blue:51/255.0 alpha:1]]; [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; [[UINavigationBar appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName: [UIColor whiteColor] }]; 它的确确实着色了MFMailComposeViewController的标题,而不是button。 我如何做到这一点? 当我在其他地方有白色时,它也保持我的状态栏黑色。

你可以用UIAppearance来设置UINavigationItem的titleview吗?

我目前使用这个代码来设置我的导航项目的titleView: – (void)viewDidLoad { … UIImage *navbarTitle = [UIImage imageNamed:@"navbartitleview1"]; UIImageView *imageView = [[UIImageView alloc]initWithImage:navbarTitle]; self.navigationItem.titleView =imageView; } 有没有办法,我可以把这个代码使用UIAppearance? [UINavigationItem appearance] 无效。

UIAppearance代理规则何时适用于新的视图控制器?

UIAppearance规则适用于一些新的视图控制器时,我正在游荡? 我已经制定了一些全球规则,并在我的应用程序委托中调用它们。 这样所有的UIButtons看起来都一样。 但是现在我想修改一个UIButton的外观。 我试着把代码删除它的背景里面- (void)viewDidLoad但它不工作 – UIAppearance规则尚未应用。 在一个ViewController中,我把修改代码放在- (void)viewWillLayoutSubviews ,它完美的工作,但现在在另一个ViewController中它不起作用(代码是相同的)。 超越UIA外表规则在哪里安全?

如何更改iOS7中UISegmentedControl边框的颜色?

如何在不改变文本颜色的情况下更改iOS7中分段控制器的边框颜色? 如果我可以保持段之间的界线(即与文本相同的颜色),那么这将是理想的,但是如果边界颜色改变意味着这条线的改变,那也是可以的。 还要注意,文本(以及段之间的线条)具有设置的颜色 [segmCtrl setTintColor:choosenTintColor]

UIBarButtonItem的setBackgroundImage通过外观不适用于其他UIControlStates

我试图使用外观方法(> iOS 5.0)自定义UIBarButtonItem。 它工作正常的UIControlStateNormal,但不是突出显示或禁用。 看图像 这是我用来设置这些的代码: // now configure the UIBarButtonItems UIImage *buttonBGInactive = [[UIImage imageNamed:@"button-navbar-30-inactive.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)]; UIImage *buttonBGActive = [[UIImage imageNamed:@"button-navbar-30-pressed.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)]; [[UIBarButtonItem appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage: buttonBGInactive forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [[UIBarButtonItem appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage: buttonBGActive forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 有任何想法吗? 图像本身是30x30px,我不需要横向模式。

使用UIAppearance指定字体时,UINavigationBar标题performanceexception(仅适用于iOS 5)

我正在使用UIAppearance在我的应用程序中为我的UINavigation栏标题设置字体。 如果我没有设置外观字体,那么标题就会像预期的那样立即显示出来,而且它的显示效果不是animation的。 但是,当我使用UIAppearance指定一个替代字体时,标题会出现(使用指定的字体),但在iOS 5上使用某种animation转换显示。它有时会停顿(?),只显示标题的第一个字符。 如果我退后一步,标题显示正确。 我只在iOS 5上看到这个问题,并且在iOS 6上用字体设置标题的行为是正确的。 这个问题也可以在iOS 5的模拟器上看到,并且在模拟器中再次与iOS 6一起运行。 我在AppDelegate中设置外观,如下所示… [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:FONT_OF_ALL_KNOWLEDGE size:0.0f], UITextAttributeFont, nil]]; 栏的标题在viewDidLoad中为每个[tabbed]视图设置, – (void)viewDidLoad { [super viewDidLoad]; [self.navigationItem setTitle:@"Title"]; } 有没有其他人看到这个问题,有没有解决? 谢谢。 UPDATE 我已经尝试在viewDidLoad(只是在设置标题之前)中明确地设置字体,而不是使用UIAppearance,我仍然看到相同的问题,并且仍然只在iOS 5上。