我可以在iOS导航栏中添加monochome可扩展自定义图标吗?

时间:2015-11-09 16:26:16

标签: ios icons uinavigationbar

iOS'Template Icons无法涵盖所有​​必需的图标,因此我需要在导航栏中添加一个自定义图标(“...”更多图标)。

现在有没有办法给iOS一个单一的,可缩放的图标文件,我可以用一种可维护的方式(例如与文本颜色相同)并且不需要生成位图?

当您想将它们用作托盘图标时,OS X会使用PDF,以便OS X可以根据亮/暗色主题更改图标的颜色。

1 个答案:

答案 0 :(得分:1)

您可以使用

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sample">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

如果您希望所有navigationItem.rightBarButtonItem?.tintColor = UIColor.redColor() 都有tintColor,则可以使用

navigationItems


TL; DR:

这是可能的,因为从let sharedApplication = UIApplication.sharedApplication() sharedApplication.delegate?.window??.tintColor = UIColor.redColor() 开始,iOS 7具有UIImage属性。

  

使用指定的渲染模式创建此图像的版本。默认情况下,图像的渲染模式为UIImageRenderingModeAutomatic。

renderingMode


关于@available(iOS 7.0, *) public func imageWithRenderingMode(renderingMode: UIImageRenderingMode) -> UIImage @available(iOS 7.0, *) public var renderingMode: UIImageRenderingMode { get }

  

默认情况下,使用UIImageRenderingModeAutomatic创建图像。具有此模式的图像被解释为模板图像或基于渲染它的上下文的原始图像。例如,导航栏,标签栏,工具栏和分段控件会自动将其前景图像视为模板,而图像视图和Web视图则将其图像视为原始图像。您可以使用UIImageRenderingModeAlwaysTemplate强制您的图像始终呈现为模板或UIImageRenderingModeAlwaysOriginal,以强制您的图像始终呈现为原始图像。

renderingMode

我们无需更改navigationItem图像的渲染模式,因为导航栏控件会自动将其前景图像视为模板。

如果我们想要,使用@available(iOS 7.0, *) public enum UIImageRenderingMode : Int { case Automatic // Use the default rendering mode for the context where the image is used case AlwaysOriginal // Always draw the original image, without treating it as a template case AlwaysTemplate // Always draw the image as a template image, ignoring its color information } 方法我们可以改变任何UIImage的渲染模式以具有此功能,例如。

imageWithRenderingMode()

对于缩放,您可以参考UIImage(named: "settings")?.imageWithRenderingMode(.AlwaysTemplate)

resizableImageWithCapInsets()方法

有关详细信息,请参阅 Essan Parto 的Ray Wenderlich教程 UIAppearance Tutorial: Getting Started

<强>更新

enter image description here

见上图。它只有10x10像素 图像可能很小,但iOS确切知道如何使用它来绘制,因为它已被预先切片并且可以调整大小。

实施例

UIImage

顶部,左侧,底部,右侧角不受影响,图像的中间部分将被加盖。使用这个微小的图像,你可以制作一个大矩形保持图像角完好无损。

您也可以使用let controlBackground = UIImage(named: "controlBackground")? .imageWithRenderingMode(.AlwaysTemplate) .resizableImageWithCapInsets(UIEdgeInsets(top: 3, left: 3, bottom: 3, right: 3)) 切换到xcodeenter image description here