UISS 代表 UIKit Style Sheets。
UISS 是一个 iOS 库,它提供了一种方便的方式来自定义您应用程序的样式。UISS 构建在 UIKit UIAppearance 代理之上。
UISS 有能力
UISS 不对您的应用程序施加任何依赖。您可以为 UISS 样式生成 Objective-C 代码,这样您甚至不需要在生产构建中链接 UISS 库。
假设您熟悉 UIAppearance 代理,您可能已经编写了类似的代码
[[UITabBar appearance] setTintColor:[UIColor darkGrayColor]]
在 UISS 中,它看起来像这样
{
"UITabBar": {
"tintColor": "darkGray",
}
}
这里没有太大区别,让我们看看更复杂的例子
[[UIButton appearance] setTitleColor:[[UIColor whiteColor] colorWithAlphaComponent:0.800]
forState:UIControlStateNormal];
[[UIButton appearance] setTitleColor:[UIColor whiteColor]
forState:UIControlStateHighlighted];
[[UIButton appearance] setBackgroundImage:[[UIImage imageNamed:@"button-background-normal"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 10.0, 0.0, 10.0)]
forState:UIControlStateNormal];
[[UIButton appearance] setBackgroundImage:[[UIImage imageNamed:@"button-background-highlighted"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 10.0, 0.0, 10.0)]
forState:UIControlStateHighlighted];
[[UILabel appearanceWhenContainedIn:[UIButton class], nil] setFont:[UIFont fontWithName:@"Copperplate-Bold" size:18.0]];
[[UIButton appearance] setTitleEdgeInsets:UIEdgeInsetsMake(1.0, 0.0, 0.0, 0.0)];
{
"UIButton":{
"titleColor:normal":["white", 0.8],
"titleColor:highlighted":"white",
"backgroundImage:normal": ["button-background-normal", [0,10,0,10]],
"backgroundImage:highlighted": ["button-background-highlighted", [0,10,0,10]],
"titleEdgeInsets": [1,0,0,0],
"UILabel":{
"font":["Copperplate-Bold", 18]
}
}
}
开始使用 UISS 最简单的方法是创建 uiss.json
文件并将其添加到项目的资源中。要激活此文件,请添加以下行
[UISS configureWithDefaultJSONFile];
这应该在您的视图显示之前调用,这是 Application Delegate 的 didFinishLaunching 方法的常见位置。
如果您想从远程位置加载风格以启用实时更新,请按照以下方法操作
self.uiss = [UISS configureWithURL:[NSURL URLWithString:@"https://127.0.0.1/uiss.json"]];
UISS 可以检测您的样式是否已更改并自动更新您的界面。要启用此功能,请调用此方法
uiss.autoReloadEnabled = YES;
uiss.autoReloadTimeInterval = 1;
uiss.statusWindowEnabled = YES;
UISS 将占用屏幕的一小部分(通常由状态栏占用)来显示幕后正在发生的事情。
轻触UISS状态栏将显示控制台视图,在其中
UISS为所有用于设置UIAppearance属性的值类型均提供了值转换器。这些转换器提供了定义属性的快捷方式和便利的语法。
以下是几个示例以及Objective-C中的等效值。
"#ffffff"
[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1]
"red"
[UIColor redColor]
"redColor"
[UIColor redColor]
"patternImageName"
[UIColor colorWithPatternImage:@"patternImageName"]
[0, 255, 255]
[UIColor colorWithRed:0.0f green:1.0f blue:1.0f alpha:1.0f]
["#ffffff", 0.5]
[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:.0.5f]
["red", 0.5]
[[UIColor redColor] colorWithAlphaComponent:0.5f]
[0, 255, 255, 0.5]
[UIColor colorWithRed:0.0f green:1.0f blue:1.0f alpha:.0.5f]
"imageName"
[UIImage imageNamed:@"imageName"]
["imageName", 1, 2, 3, 4]
[[UIImage imageNamed:@"imageName"] resizableImageWithCapInsets:UIEdgeInsetsMake(1, 2, 3, 4)]
14
[UIFont systemFontOfSize:14.0f]
["bold", 14]
[UIFont boldSystemFontOfSize:14.0f]
["italic", 20]
[UIFont italicSystemFontOfSize:14.0f]
["Georgia-Italic", 12]
[UIFont fontWithName:@"Georgia-Italic" size:12.0f]
{
"font": ["bold", 12],
"textColor": "black",
"textShadowColor": "lightGray",
"textShadowOffset": [1, 2]
}
[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont boldSystemFontOfSize:12], UITextAttributeFont,
[UIColor blackColor], UITextAttributeTextColor,
[UIColor lightGrayColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(1, 2)], UITextAttributeTextShadowOffset, nil];
JSON | Objective-C |
---|---|
1 |
CGSizeMake(1, 1) |
[1] |
CGSizeMake(1, 1) |
[1, 2] |
CGSizeMake(1, 2) |
JSON | Objective-C |
---|---|
[1, 2, 3, 4] |
CGRectMake(1, 2, 3, 4) |
JSON | Objective-C |
---|---|
[1, 2, 3, 4] |
UIEdgeInsetsMake(1, 2, 3, 4) |
JSON | Objective-C |
---|---|
1 |
UIOffsetMake(1, 1) |
[1] |
UIOffsetMake(1, 1) |
[1, 2] |
UIOffsetMake(1, 2) |
JSON | Objective-C |
---|---|
1 |
CGPointMake(1, 1) |
[1] |
CGPointMake(1, 1) |
[1, 2] |
CGPointMake(1, 2) |
JSON | Objective-C |
---|---|
默认 |
UIBarMetricsDefault |
横向电话 |
UIBarMetricsLandscapePhone |
JSON | Objective-C |
---|---|
正常 |
UIControlStateNormal |
高亮显示 |
UIControlStateHighlighted |
禁用 |
UIControlStateDisabled |
选中 |
UIControlStateSelected |
预留 |
UIControlStateReserved |
应用 |
UIControlStateApplication |
JSON | Objective-C |
---|---|
任何 |
UISegmentedControlSegmentAny |
左侧 |
UISegmentedControlSegmentLeft |
中间 |
UISegmentedControlSegmentCenter |
右侧 |
UISegmentedControlSegmentRight |
单独 |
UISegmentedControlSegmentAlone |
JSON | Objective-C |
---|---|
任何 |
UIToolbar位置任意 |
底部 |
UIToolbar位置底部 |
顶部 |
UIToolbar位置顶部 |
JSON | Objective-C |
---|---|
搜索 |
UISearchBar图标搜索 |
清除 |
UISearchBar图标清除 |
书签 |
UISearchBar图标书签 |
结果列表 |
UISearchBar图标结果列表 |
您可以在UISS样式中定义变量。所有变量都应在您的样式字典中的变量键下定义。引用变量时,请在其名称前加上$符号。
示例
{
"Variables": {
"tintColor": "red"
},
"UIToolbar": {
"tintColor": "$tintColor"
}
}
有时,您可能希望iPhone上的外观与iPad上稍有不同。使用UISS,您可以创建仅适用于指定UI习语的样式部分。
{
"UINavigationBar": {
"Phone": {
"tintColor": "gray"
},
"Pad": {
"tintColor": "lightGray"
}
}
}
JSON规范不支持注释。但有时能够轻松禁用UISS样式的一部分可能非常有用。您可以通过在字典键前添加-
前缀来实现。UISS将忽略这些键而不会报告错误。
示例
{
"UIToolbar": {
"-tintColor": "blue",
"backgroundImage:any:default": "background"
},
"-UITabbar": {
"tintColor": "blue"
}
}
这只会设置UIToolbar的背景图像。