CTAppearance
is a clone of the native UIAppearance
proxy.
It's current purpose is to provide an alternative to UIAppearance
on iOS7. In iOS7 GM UIAppearance
is currently very slow and is unusable for apps that make heavy use of this feature.
Simply just include the CTAppearance files in your project. This will replace all use of UIAppearance
with CTAppearance
. By default any appearance
or appearanceWhenContainedIn
calls will use the ones provided by CTAppearance
To avoid replacing all use of UIAppearance
define the macro
#define CTAPPEARANCE_DISABLE_AUTO_INSTALL 1
and enable
[CTAppearance setEnabled: YES];
The appearance proxy can then be called using appearanceCT
and appearanceCTWhenContainedIn
[[UILabel appearanceCT] setBackgroundColor: [UIColor redColor]];
[[UILabel appearanceCTWhenContainedIn: [UIView class], nil] setTextColor:[UIColor blueColor]];
WARNING: Does not currently respect properties that have been manually assigned.
So in the following case:
[[UILabel appearanceCT] setBackgroundColor: [UIColor redColor]];
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0,0,100,20)];
label.backgroundColor = [UIColor greenColor];
The label will remain redColor.
As the work currently happens in willMoveToSuperview, it's generally possible to make the modifications after addSubview like so:
[[UILabel appearanceCT] setBackgroundColor: [UIColor redColor]];
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0,0,100,20)];
[self addSubview: label];
label.backgroundColor = [UIColor greenColor];
The solutions I know about to fix / support this feature require a lot of swizzling hackery, and for our current use case was not worth the performance and stability trade off. But if anyone knows a good way of handling this functionality I'll be happy to accept your pull request or please let me know your ideas!
CTAppearance is available under the MIT license. See the LICENSE file for more info.