Swift3 iOS - Navigation TitleView 中的圆形 ImageView 保持显示正方形?

Posted

技术标签:

【中文标题】Swift3 iOS - Navigation TitleView 中的圆形 ImageView 保持显示正方形?【英文标题】:Swift3 iOS -Rounded ImageView in Navigation TitleView Keeps Showing Square? 【发布时间】:2017-07-20 20:47:45 【问题描述】:

我有一个圆形的 imageView,用于我的应用中的个人资料图片。我在整个应用程序中的 tableView 单元格和视图控制器的不同视图中多次使用该代码。个人资料图片始终显示为圆形。当我使用下面的代码将配置文件图片设置为在 navItem 的 titleView 内舍入时,它仅显示为正方形。

为什么在navItem的titleView中不显示圆形?

var url: String?//it's already set with some value

override func viewDidLoad() 
        super.viewDidLoad()

        setTitleView(urlStr: url)


func setTitleView(urlStr: String?)

        let titleView = UIView()
        titleView.frame = CGRect(x: 0, y: 0, width: 44, height: 44)

        let containerView = UIView()
        containerView.translatesAutoresizingMaskIntoConstraints = false
        titleView.addSubview(containerView)

        let imageView = UIImageView()
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .scaleAspectFill
        imageView.layer.cornerRadius = imageView.frame.size.width / 2
        imageView.clipsToBounds = true
        imageView.layer.borderColor = UIColor.white.cgColor
        imageView.layer.borderWidth = 0.5
        imageView.backgroundColor = UIColor.white

        if let urlStr = urlStr
            let url = URL(string: urlStr)
            imageView.sd_setImage(with: url!)
        

        containerView.addSubview(imageView)

        imageView.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true
        imageView.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
        imageView.widthAnchor.constraint(equalToConstant: 40).isActive = true
        imageView.heightAnchor.constraint(equalToConstant: 40).isActive = true

        containerView.centerXAnchor.constraint(equalTo: titleView.centerXAnchor).isActive = true
        containerView.centerYAnchor.constraint(equalTo: titleView.centerYAnchor).isActive = true

        navigationItem.titleView = titleView

【问题讨论】:

【参考方案1】:

看起来imageView.layer.cornerRadius = imageView.frame.size.width / 2 设置为0imageView.frame.size.width 在这里等于0

不用let imageView = UIImageView(),你可以在创建imageView时用let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))预定义frame

【讨论】:

很好地抓住了那个+1

以上是关于Swift3 iOS - Navigation TitleView 中的圆形 ImageView 保持显示正方形?的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发---宏定义大全

iOS开发-UI Navigation

Codeforces 1321D Navigation System

iOS定制改动navigation的backbutton

iOS Navigation 使用的一些总结

获取iOS顶部状态栏和Navigation的高度