Swift3 iOS -Rounded ImageView导航TitleView保持显示正方形?

时间:2017-07-20 20:47:45

标签: ios swift uiimageview uinavigationitem titleview

我有一个圆形的imageView,我用于我的应用程序中的个人资料照片。我在tableView单元格中的应用程序中以及视图控制器中的不同视图中多次使用该代码。配置文件pic始终显示为圆形。当我使用下面的代码将配置文件pic设置为在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 个答案:

答案 0 :(得分:2)

看起来imageView.layer.cornerRadius = imageView.frame.size.width / 2设置为0imageView.frame.size.width此处等于0

而不是let imageView = UIImageView(),您可以在使用let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))创建imageView时预定义框架