测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2015年4月 |
由Tony Mann,Tom Benner,Tim Bodeit,Stunner维护。
使用样式表来美化 iOS 应用,类似于 CSS
NUI 是一个适用于 iOS 的 UI 库,允许您使用样式表来美化 UI 元素,类似于 CSS。它让您能在几分钟内美化整个应用。
默认的样式如下:
不过,这些样式很容易修改。例如,上面的样式声明就像这样链接。这里有一些定义在这里的主题示例。
样式使用类似 CSS 的语法进行声明,并支持变量
@primaryFontName: HelveticaNeue;
@secondaryFontName: HelveticaNeue-Light;
@primaryFontColor: #333333;
@primaryBackgroundColor: #E6E6E6;
Button {
background-color: @primaryBackgroundColor;
border-color: #A2A2A2;
border-width: @primaryBorderWidth;
font-color: @primaryFontColor;
font-color-highlighted: #999999;
font-name: @primaryFontName;
font-size: 18;
corner-radius: 7;
}
NavigationBar {
background-tint-color: @primaryBackgroundColor;
font-name: @secondaryFontName;
font-size: 20;
font-color: @primaryFontColor;
text-shadow-color: #666666;
text-shadow-offset: 1,1;
}
NUI 允许您:
Button { border-color: #CCCCCC; }
@primaryFontName
或 @myBackgroundColor
(类似于 Sass/LESS)一些令人兴奋的特性即将推出,并非常鼓励贡献。请参阅FAQ。
将 NUI 添加到项目中后,您可以通过简单地编辑 NUIStyle.nss 来修改您应用的外观。如果您不想修改 NUI 的文件,可以将 NUIStyle.nss 拷贝到您的应用中,重命名它(例如 MyTheme.nss),然后将 [NUISettings init]
替换为 [NUISettings initWithStylesheet:@"MyTheme"];
(安装步骤中的第 4 步)。
由于 UIKit 使用简单 UI 组件构建更复杂的 UI 组件的性质,NUI 在某些非常罕见的情况下不会美化某些 UIKit 组件。如果您需要为这些情况应用样式,只需使用 NUIRenderer 即可。
[NUIRenderer renderButton:myButton];
这将使用 'Button' 样式。您也可以指定一个自定义类
[NUIRenderer renderButton:myButton withClass:@"LargeButton"]
注意:NUI 以前要求您将元素继承自一个 NUI 类,但现在已经不再是这种情况。有关详细信息,请参阅下面的“从子类迁移到分类”。
NUIStyle.nss 包含所有样式规则。例如,规则 Button { font-name: Helvetica; }
会修改每个 UIButton 的字体名称。
格式应自解释,但这里有一些注意事项
要查看所有可用的属性和值,请参阅下面的“样式类和样式值类型”列表。
您可以给元素添加自定义样式类(例如LargeButton
),并使用Button:LargeButton
这种形式使这些类继承一个或多个其他样式类。要跳过特定元素NUI的样式,请将类设置为none
。您可以在Interface Builder中或编程方式下设置元素样式类。
为此,您需要为元素设置一个运行时属性(在Identity Inspector > 用户定义的运行时属性,点击+
)。设置键路径为nuiClass
,类型为String
,值为LargeButton
(或Button:MyButton
)。
为此,您需要导入元素的NUI类别。如果您正在样式化UIButton,您需要导入
#import "UIButton+NUI.h"
然后,您可以在元素上设置nuiClass
myButton.nuiClass = @"LargeButton";
注意。一个样式类可以继承无限数量的样式规则,因此如果您想要创建样式规则的组,可以将nuiClass
设置为类似@"MyStyleGroup1:MyStyleGroup2:MyButton"
的值。
如果您想要防止特定的视图类被样式化(例如,第三方已样式的UI元素),您可以在NSS中指定这些。
Button {
exclude-views: UIAlertButton;
exclude-subviews: UITableViewCell,TDBadgedCell,UITextField;
}
exclude-views
会阻止NUI将Button
样式应用于指定类的视图exclude-subviews
会阻止NUI将`Button`样式应用于指定类的视图的子视图如果您想要全局阻止特定视图类被样式化(无论样式类),您可以使用+[NUISettings setGlobalExclusions:]
来做。
int main(int argc, char *argv[])
{
@autoreleasepool {
[NUISettings init];
[NUISettings setGlobalExclusions:@[@"ABMemberCell", @"ABMultiCell"]];
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
}
}
您可以使用@media查询来仅为特定设备和一个或多个方向应用样式或变量定义。
@media (device:ipad) {
/* styles or definitions for iPad */
}
@media (device:iphone) {
/* styles or definitions for iPhone */
}
@media (orientation:landscape) {
/* styles or definitions for landscape orientation */
}
@media (orientation:portrait) {
/* styles or definitions for portrait orientation */
}
@media (orientation:portrait) and (device:ipad) {
/* styles or definitions for portrait orientation on iPad */
}
要为此,请在main.m中[NUISettings init];之后添加以下行,将@"/path/to/Style.nss"
替换为您的.nss文件的绝对路径(例如/Users/myusername/projects/ios/MyApp/Style.nss
)
[NUISettings setAutoUpdatePath:@"/path/to/Style.nss"];
现在,每当您在应用程序运行时修改和保存.nss文件时,新更改将立即应用,无需重新构建应用程序。这将大大加快样式化过程。当您创建发布版本时,请删除此行。
因为所有样式规则都包含在 NUIStyle.nss 中,所以很容易创建一个可以在其他项目中重复使用的 NUI 主题。如果您制作了您喜欢的主题,请告诉我,我很可能会很乐意将其包含在这个仓库中。
NUI 0.1 版本要求您手动使您的应用程序 UI 组件继承自 NUI 类(例如 NUIButton
)。NUI 现在不再需要这样做,因为它使用 UIKit 类别而不是子类。如果您以前使用过 NUI 0.1 并更新到 NUI 的新版本,您只需取消设置那些自定义类即可,例如,UIButton 就简单地是 UIButton,而不是 NUIButton(这可以在 Identity Inspector > Custom Class 中完成,或者在进行应用程序代码时完成)。
以下是所有可用的样式类,它们对应的 UI 组件类以及它们支持的性质。值类型(例如 Color,Gradient)在样式值类型中描述。
UIBarButtonItem
UIBarButtonItem 返回按钮,继承自 BarButton
UIButton
UIControl
UILabel
UINavigationBar
UIProgressView
UISearchBar
UISearchBar button,继承自 Button
见 Button
UISearchBar 范围栏,继承自 SegmentedControl
见 SegmentedControl
UISegmentedControl
UISlider
UISwitch
UITabBar
UITabBarItem
UITableView
UITableViewCell
UITableViewCell 的详情标签
UIToolbar
UITextField
UITextView
UIView
UIWindow
true
或 false
)none
、line
、bezel
和 rounded
。padding
和 margin
属性(上、右、下、左)。例如:15
(每个边框宽度为 15),10 15
(顶部和底部的宽度为 10,右部和左部的宽度为 15)#FF0000
);一个 rgb、rgba、hsl 或 hsla 表达式(例如 rgb(255,0,0)
或 hsla(0.5, 0, 1.0, 0.5)
);或 UIColor 有相关方法名的颜色名称(例如 red
、yellow
、clear
)。如果支持 [UIColor redColor]
,那么 red
也是支持的。system
、boldSystem
或 italicSystem
。[UIImage imageNamed:name]
中使用(例如 MyImage.png
)。-1
、4.5
)-1,1
)none
、single-line
和 single-line-etched
。left
、right
、center
)uppercase
、lowercase
、capitalize
、none
)top
、center
、bottom
、fill
)我们非常欣赏贡献者!NUI 包含了大量的功能,但仍有不少元素和属性不受支持。添加对新属性的支持很简单(请参阅 NUIButtonRenderer 中的示例)。还有许多令人兴奋的大型功能在 路线图 上等待开发。我们也在寻找新的主题,所以请随时添加它们!
UIAppearance 可以,但它不直观、耗时不长,且不支持 NUI 所做的那样的细致和大量样式修改。样式应该在一个简单的样式表中以简单的属性定义进行抽象;你不应该需要长时间盯着嵌套的调用方法,每次你要进行小量的样式修改时都必须查阅 Apple 的文档。
当然可以!请自在地将其添加到 使用 NUI 的应用程序。
是的!它上市时间尚不清楚,它不会免费(指字面意义,也可能是引申意义),而且它的产品好坏仍然存在争议。我更偏好免费、轻量级的解决方案。
"New-ee"。(当然,它与 "GUI" 发音相似。)
NUI采用MIT许可证发布。请参见LICENSE文件以获取详细信息。