首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UINavigationBarAppearance中设置阴影半径?

如何在UINavigationBarAppearance中设置阴影半径?
EN

Stack Overflow用户
提问于 2021-04-09 03:29:00
回答 2查看 52关注 0票数 2

我正在尝试设置阴影半径,但是UINavigationBar外观没有这样的方法,只有shadowImage方法,它不能解决问题。

我需要在NavigationBar上创建一个阴影,以便它更容易被注意到。我可以设置它的颜色,但不能设置它的半径。我该怎么做呢?

代码本身:

代码语言:javascript
复制
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())
            }
}

结果:

我们可以看到,阴影是有颜色的,但是阴影本身太小了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-09 04:50:21

@Luch,谢谢你的提示。我还不得不为这段代码的扩展而苦恼。这是最终工作代码的样子:

代码语言:javascript
复制
    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)
        }
    }
}

结果:

票数 0
EN

Stack Overflow用户

发布于 2021-04-09 03:54:57

在我的一些应用程序上,我使用了一个自定义的阴影图像,不知道它是否可以工作。尝试在创建阴影图像时增加高度值

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67010670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档