我正在尝试设置阴影半径,但是UINavigationBar外观没有这样的方法,只有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())
}
}结果:

我们可以看到,阴影是有颜色的,但是阴影本身太小了。
发布于 2021-04-09 04:50:21
@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)
}
}
}结果:

发布于 2021-04-09 03:54:57
在我的一些应用程序上,我使用了一个自定义的阴影图像,不知道它是否可以工作。尝试在创建阴影图像时增加高度值
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 = coloredAppearancehttps://stackoverflow.com/questions/67010670
复制相似问题