标签: uiappearance

我什么时候可以开始使用UIAppearance设置的属性?

我在我的视图类(后代UIView)中有一些自定义外观属性.我想根据这些属性自定义视图外观,但我不能在初始化程序中执行此操作,因为设置的值[[MyClass appearance] setFoo:…]在此时无效:

@interface View : UIView
@property(strong) UIColor *someColor UI_APPEARANCE_SELECTOR;
@end

@implementation View
@synthesize someColor;

// Somewhere in other code before the initializer is called:
// [[View appearance] setSomeColor:[UIColor blackColor]];

- (id) initWithFrame: (CGRect) frame
{
    self = [super initWithFrame:frame];
    NSLog(@"%@", someColor); // nil
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

它们已经设置好layoutSubviews,但这不是执行视图自定义的好点,因为某些自定义可能会layoutSubviews再次触发,从而导致无限循环.

那么,执行自定义有什么好处呢?或者有没有办法触发应用外观值的代码?

cocoa-touch ios uiappearance

10
推荐指数
1
解决办法
819
查看次数

setSelectedImageTintColor在iOS 7中不起作用

我正在尝试setSelectedImageTintColor在iOS 7中,但它无法正常工作.下面是我在我的代码AppDelegate.mdidFinishLaunchingWithOptions

UITabBarController *tabBarController = (UITabBarController *) self.window.rootViewController;
UITabBar *tabBar = tabBarController.tabBar;

for (UITabBarItem *item in tabBar.items)
    {
        UIImage *image = item.image;
        UIImage *correctImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
        item.image = correctImage;
    }

[[UITabBar appearance] setTintColor:[UIColor whiteColor]];
[[UITabBar appearance] setSelectedImageTintColor:[UIColor colorWithRed:44.0/255.0 green:176.0/255.0 blue:28.0/255.0 alpha:1.0]];
[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0]];
Run Code Online (Sandbox Code Playgroud)

它仍然不会显示selectedImageTintColor.选中时它是白色的; 未选中时为灰色.我究竟做错了什么?

objective-c uitabbarcontroller ios uiappearance ios7

10
推荐指数
1
解决办法
4587
查看次数

MFMailComposeViewController由于iOS6上的全局外观属性而崩溃

当我提出一个问题时,我遇到了以下崩溃MFMailComposeViewController:

2013-11-08 11:04:05.963 <redacted>[7108:1603] *** Assertion failure in NSDictionary *_UIRecordArgumentOfInvocationAtIndex(NSInvocation *, NSUInteger, BOOL)(), /SourceCache/UIKit/UIKit-2380.17/UIAppearance.m:1118
2013-11-08 11:04:06.032 <redacted>[7108:1603] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unknown key, "NSColor" in title text attributes dictionary'
Run Code Online (Sandbox Code Playgroud)

我在AppDelegate的application:didFinishLaunchingWithOptions:方法中将其跟踪到以下外观设置:

        [[UINavigationBar appearance] setTitleTextAttributes:
            @{NSForegroundColorAttributeName : [UIColor whiteColor]}];
Run Code Online (Sandbox Code Playgroud)

注释掉该行就可以了,但是会破坏应用程序的其余部分,所以我尝试将titleTextAttributes专门设置为空字典MFMailComposeViewController:

尝试#1

        [[UINavigationBar appearanceWhenContainedIn:
            NSClassFromString(@"MFMailComposeViewController"), nil]
            setTitleTextAttributes:@{ }];
Run Code Online (Sandbox Code Playgroud)

这导致同样的崩溃.和

        [[UINavigationBar appearanceWhenContainedIn:
            NSClassFromString(@"MFMailComposeViewController"), nil]
            setTitleTextAttributes:nil];
Run Code Online (Sandbox Code Playgroud)

也导致同样的崩溃.

尝试#2

我注意到这MFMailComposeViewController是一个UINavigationController,所以也许全局外观设置本地化到UINavigationController 的UIViewControllers .我整理了一些代码来确定MFMailComposeViewController中的视图控制器:

        for (UIViewController *viewController in mailViewController.viewControllers) {
            NSLog(@"%@", NSStringFromClass([viewController …
Run Code Online (Sandbox Code Playgroud)

objective-c ios uiappearance mfmailcomposeviewcontroller

10
推荐指数
1
解决办法
4011
查看次数

模态未设置的UINavigationBar外观

我在appDelegate中使用以下代码在我的应用程序中设置我的UINavigationBar和状态栏的外观:

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Run Code Online (Sandbox Code Playgroud)

此代码正确地将所有内容的外观设置为白色,除非阻止第三方模式viewController,例如来自Dropbox API或来自UIActivityViewController的Mail/Message viewController.我已经包含了一些屏幕截图来展示它们的外观.

UIActivityViewController邮件: UIActivityViewController邮件

UIActivityViewController消息: UIActivityViewController消息

Dropbox API: Dropbox API

我试过把它放进去

[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];
Run Code Online (Sandbox Code Playgroud)

以及

[[UINavigationBar appearanceWhenContainedIn:[UIActivityViewController class], nil] setTintColor:[UIColor whiteColor]];
Run Code Online (Sandbox Code Playgroud)

而且没有人在工作.

uinavigationbar ios uiappearance uiactivityviewcontroller

10
推荐指数
1
解决办法
3425
查看次数

如何在不需要时摆脱UIAppearance?

在我的AppDelegate中,我使用UIAppearance使用以下代码设置我自己的NavigationBar:

[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav5.png"] forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

但是我的应用程序的一些视图不需要它.我怎样才能摆脱它,所以我只能在相关的观点中使用IB?

objective-c uinavigationbar ios uiappearance

9
推荐指数
1
解决办法
1316
查看次数

如何设置UIButton的外观而不影响UIBarButtonItems?

使用以下代码自定义常规UIButtons还会影响文本字段中的UIBarButtonItems和清除按钮.

[[UIButton appearance] setBackgroundImage:greenButtonImage forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

希望可言,只有经常定制后者元素圆矩形按钮.我意识到使用appearanceWhenContainedIn:可用于为UIBarButtonItems和UITextField设置自定义外观,但我希望这些按钮保持标准.子类化不是一个选项,因为它不应该用于这样一个简单的任务.

有一个类似的问题,但它没有解决这个问题.为什么 - [[UIButton appearance] setBackgroundImage]影响UIBarItem对象的初始外观,你如何纠正它?

appearance objective-c ios ios5 uiappearance

9
推荐指数
1
解决办法
1036
查看次数

MFMessageComposeViewController外观iOS 7

我有一个外观代理,将barTintColor属性设置为绿色UINavigationBar

[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:54./255 green:165./255 blue:53./255 alpha:1]];

根据需要,我使用覆盖它 appearanceWhenContainedIn:

[[UINavigationBar appearanceWhenContainedIn:[INFSearchViewController class], nil] setBarTintColor:[UIColor colorWithWhite:0.80 alpha:1]];

这很好用.

但是,当我提出MFMessageComposeViewController它遵守UINavigationBar代理时,看起来如下所示.

在此输入图像描述

这显然看起来很糟糕,我宁愿MFMessageComposeViewController不坚持代理,但试图做

[[UINavigationBar appearanceWhenContainedIn:[MFMessageComposeViewController class], nil] setBarTintColor:[UIColor whiteColor]];

没有影响.

我应该采取什么行动?

ios uiappearance ios7 mfmailcomposeviewcontroller

9
推荐指数
2
解决办法
5500
查看次数

受UIButton外观设置影响的UIMenuController中的文本颜色

我观察到以下情况:

通过设置具有外观的a 的Titlecolor,a 中的a 得到相同的颜色.UIButtonUIMenuItemsUIMenuControllerUITextView

代码applicationDidFinishLaunching:

[[UIButton appearance] setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];  
Run Code Online (Sandbox Code Playgroud)

我的问题:

有没有办法抑制它

UIMenuItems另一种颜色?

我尝试过的:

  1. withWhenContainedIn UITextview
    我试图设置TextViews中包含的按钮的外观
    [UIButton appearanceWhenContainedIn:[UITextView class], nil]
    但是这显然不起作用,因为UIMenuController它不在TextView中.

  2. 使用appearanceWhenContainedIn UIMenuController/UIMenuItem
    是不可能的,因为两者都没有实现UIAppearanceContainer协议.

uibutton uimenucontroller uiappearance

9
推荐指数
1
解决办法
1392
查看次数

iOS:UIViewControllerBasedStatusBarAppearance YES的默认状态栏样式

有没有办法在保持UIViewControllerBasedStatusBarAppearance启用的同时设置默认状态栏样式?

这是问题,我正在处理:

UIStatusBarStyle.LightContent由于导航栏背景较暗,因此几乎需要使用整个应用程序.最初,UIViewControllerBasedStatusBarAppearance被禁用,并且Info.plist在文本状态状态栏中设置了以下内容:

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
Run Code Online (Sandbox Code Playgroud)

这工作得很好,直到我发现这个.LightContent状态栏甚至显示为某些共享扩展,如Facebook Messenger,导致它不可读:

Facebook Messenger Share Extension灯状态栏样式

这可以通过使用来解决UIViewControllerBasedStatusBarAppearance,但是我需要将以下方法添加到我想要避免的所有视图控制器中,因为应用程序非常大.

此外,对于具有轻型导航栏背景的应用程序中的一个屏幕,我使用UIApplication.sharedApplication().setStatusBarStyle()但是在iOS 9中不推荐使用此方法.

任何想法如何解决这个问题?混写?

ios uiappearance ios7-statusbar

9
推荐指数
1
解决办法
2570
查看次数

断言失败 - [UITableView _addScrollViewScrollObserver:]同时使用大标题导航ios 11

我有带有视图控制器的标签栏控制器,其中只有一个表视图.

我使用代码设置导航栏大标题:

if (@available(iOS 11.0, *)) {
        [[UINavigationBar appearance] setPrefersLargeTitles:YES];
    } else {
        // Fallback on earlier versions
    }
Run Code Online (Sandbox Code Playgroud)

当我第二次打开标签时,它正在崩溃应用程序.或随机移动标签以及以下消息.

错误消息如下所示:

Assertion failure in -[UITableView _addScrollViewScrollObserver:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3694.4.18/UIScrollView.m:7693
Run Code Online (Sandbox Code Playgroud)

任何解决问题的想法.谢谢.

uitabbarcontroller uitableview uiappearance ios11 large-title

9
推荐指数
1
解决办法
431
查看次数