[英]How to set shadow radius in UINavigationBarAppearance?
我正在尝试设置阴影半径,但是 UINavigationBar Appearance 没有这样的方法,只有 shadowImage 方法,并不能解决问题。
我需要在 NavigationBar 上做一个阴影,这样它会稍微明显一些。 我可以设置它的颜色,但不能设置它的半径。 我怎样才能做到这一点?
代码本身:
struct ContentView: View {
init() {
let coloredAppearance = UINavigationBarAppearance()
coloredAppearance.configureWithOpaqueBackground()
coloredAppearance.shadowColor = .brown
coloredAppearance.backgroundColor = .green
coloredAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.black]
UINavigationBar.appearance().standardAppearance = coloredAppearance
UINavigationBar.appearance().scrollEdgeAppearance = coloredAppearance
}
var body: some View {
NavigationView {
Text("Screen")
.navigationBarTitle("Test", displayMode: .large)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
我们可以看到,阴影是有颜色的,但是阴影本身太小了。
在我的一些应用程序中,我使用自定义阴影图像,不知道它是否会起作用。 创建阴影图像时尝试增加高度值
let shadowImage = UIColor(hexString: "#000000")
.image(CGSize(width: 1, height: 1 / UIScreen.main.scale))
let coloredAppearance = UINavigationBarAppearance()
coloredAppearance.shadowImage = shadowImage
UINavigationBar.appearance().standardAppearance = coloredAppearance
UINavigationBar.appearance().scrollEdgeAppearance = coloredAppearance
@Luch,感谢您的提示。 我还不得不通过扩展此代码来折磨自己。 这是最终工作代码的样子:
struct ContentView1: View {
init() {
let shadowColor = UIColor.init(hex: "#000000")
let shadowImage = UIImage(color: shadowColor, size: CGSize(width: 1, height: 9 / UIScreen.main.scale))
let alphaImage = shadowImage?.withAlpha(0.5)
let coloredAppearance = UINavigationBarAppearance()
coloredAppearance.backgroundColor = .green
coloredAppearance.shadowImage = alphaImage
coloredAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.black]
UINavigationBar.appearance().standardAppearance = coloredAppearance
UINavigationBar.appearance().scrollEdgeAppearance = coloredAppearance
}
var body: some View {
NavigationView {
Text("Screen")
.navigationBarTitle("Test", displayMode: .large)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct StackOver_Previews: PreviewProvider {
static var previews: some View {
ContentView1()
}
}
// create UIcolor by hex
extension UIColor {
public convenience init(hex:String) {
var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
if (cString.hasPrefix("#")) {
cString.remove(at: cString.startIndex)
}
var r: CGFloat = 0.0
var g: CGFloat = 0.0
var b: CGFloat = 0.0
var a: CGFloat = 1.0
var rgbValue:UInt64 = 0
Scanner(string: cString).scanHexInt64(&rgbValue)
if ((cString.count) == 8) {
r = CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0
g = CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0
b = CGFloat((rgbValue & 0x0000FF)) / 255.0
a = CGFloat((rgbValue & 0xFF000000) >> 24) / 255.0
}else if ((cString.count) == 6){
r = CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0
g = CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0
b = CGFloat((rgbValue & 0x0000FF)) / 255.0
a = CGFloat(1.0)
}
self.init( red: r,
green: g,
blue: b,
alpha: a
)
} }
// create image by Color
public extension UIImage {
convenience init?(color: UIColor, size: CGSize) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
// just for setting alpha
extension UIImage {
func withAlpha(_ alpha: CGFloat) -> UIImage {
return UIGraphicsImageRenderer(size: size).image { _ in
draw(at: .zero, blendMode: .normal, alpha: alpha)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.