Zuz*_*lis 47 xcode objective-c uiimageview ios
在下面的例子中,有两个UIImageViews具有相同的设置和相同的模板图像...但一个色调图像,一个不
我重复工作UIImageView并放置它而不是另一个它工作.这发生在我身上多次,这个解决方案总能奏效,但我仍然想知道我做错了什么?它可以是Xcode错误吗?你有类似的事吗?我有Xcode 8.1.
Dav*_*ees 121
易修复解决方案:
只需添加一个新的运行时属性,它将UIImageView的tintColor设置为指定的颜色,并确保图像着色.
您仍然需要将图像设置为在Images.xcassets文件中呈现为模板图像.
这样您就不需要任何额外的插座,扩展或代码行.
另请注意: 如果视图上的tintColor颜色相同,则不会在用户定义的属性中应用tintColor,它们必须不同.
all*_*ire 50
我发现最好的解决方案不需要子类或其他IBInspectable属性:
import UIKit
extension UIImageView {
override open func awakeFromNib() {
super.awakeFromNib()
tintColorDidChange()
}
}
Run Code Online (Sandbox Code Playgroud)
ric*_*ins 24
问题源于没有空状态的色调值(在Storyboard/Interface Builder UI中).为了让Xcode决定是否应该应用色调UIImageView,似乎还有一个额外的测试.在Xcode中,这显然是通过评估应用的约束来完成的UIImageView.据我所知,这个测试没有记录.
如果在您的两侧(或一侧)上只有"最近邻居间距"约束,UIImageView那么无论设置的值如何,都不会应用色调UIImage.renderingMode.
如果在您的三个(或所有)边上有"间隔到最近邻居"约束,UIImageView则如果UIImage.renderingMode设置为,则应用色调.alwaysTemplate.
在纯粹的Storyboard/Interface Builder方法中,您可以UIImage.renderingMode通过将图像添加到资产目录,然后将图像集的"渲染为"属性更改为"模板图像"来设置图像.
Par*_*ram 17
尝试以tintColor编程方式设置; 它解决了我的问题.
小智 15
我认为UIImageView中存在一个错误.如果在故事板中设置了色调,即使资源设置为呈现为模板,它也不会应用该色调.
解决方法是将色调颜色应用于故事板中的UIImageView父视图.
或者,将tintColor设置为nil,然后通过将UIImageView绑定到插座再将其设置为代码.
使用此扩展从界面构建器设置UIImageView tintColor.
extension UIImageView {
@IBInspectable var imageColor: UIColor! {
set {
super.tintColor = newValue
}
get {
return super.tintColor
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行时属性技巧对我不起作用。我制作这个类只是为了修复这种东西。您只需将所有有问题的图像视图设置为此类。
final class TintedImageView: UIImageView {
// WORKAROUND: Template images are not tinted when set using the Interface Builder.
override func layoutSubviews() {
super.layoutSubviews()
let preferredTintColor = tintColor
tintColor = nil
tintColor = preferredTintColor
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18591 次 |
| 最近记录: |