Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 未在视图中取整的图像_Swift_Uiimageview_Uiimage_Uistackview - Fatal编程技术网

Swift 未在视图中取整的图像

Swift 未在视图中取整的图像,swift,uiimageview,uiimage,uistackview,Swift,Uiimageview,Uiimage,Uistackview,我正在尝试将几个图像四舍五入,并将它们添加到堆栈视图中,但由于某些原因,它不起作用。基本上,我有一个包含所有UIImage名称的数组,并将它们分配给UIImageView。当我试图在图像上画一个圆圈时,它不起作用: var navStackView : UIStackView = { let stack = UIStackView() stack.axis = .horizontal stack.alignment = .center stack.distrib

我正在尝试将几个图像四舍五入,并将它们添加到堆栈视图中,但由于某些原因,它不起作用。基本上,我有一个包含所有
UIImage
名称的数组,并将它们分配给
UIImageView
。当我试图在图像上画一个圆圈时,它不起作用:

 var navStackView : UIStackView = {
    let stack = UIStackView()
    stack.axis = .horizontal
    stack.alignment = .center
    stack.distribution = .fillEqually
   // stack.spacing = -10
    stack.translatesAutoresizingMaskIntoConstraints = false
    return stack
}()

var images = ["1", "2", "3", "4"]

override func viewDidLoad() {
    super.viewDidLoad()

    let navController = navigationController!

    navController.navigationBar.addSubview(navStackView)
    // x, y, w, h
    navStackView.leadingAnchor.constraint(equalTo: navController.navigationBar.leadingAnchor).isActive = true
    navStackView.trailingAnchor.constraint(equalTo: navController.navigationBar.trailingAnchor).isActive = true
    navStackView.topAnchor.constraint(equalTo: navController.navigationBar.topAnchor).isActive = true
    navStackView.bottomAnchor.constraint(equalTo: navController.navigationBar.bottomAnchor).isActive = true


    for image in images {
        let imageView = UIImageView()
        imageView.image = UIImage(named: image)
        imageView.layer.cornerRadius = imageView.frame.height / 2
        imageView.clipsToBounds = true
        imageView.layer.masksToBounds = false
        imageView.contentMode = .scaleAspectFit
     //   imageView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        navStackView.addArrangedSubview(imageView)

        navStackView.layoutIfNeeded()
    }

    navigationItem.titleView = navStackView
}
你可以试试

var once = true
override func viewDidLayoutSubviews() {
  super.viewDidLayoutSubviews()
  if once {
     navStackView.subviews.forEach { $0.layer.cornerRadius = $0.frame.height / 2 }
     once = false
  }
}

这不是每次布置子视图时都会被称为吗?如果需要在视图控制器中执行其他视图操作,这不是效率低下吗?是的,我总是建议在viewDidLayoutSubviews中使用once var,如果他必须使用它,这对我来说似乎是一种糟糕的方法。@RakeshaShastri这种方法众所周知,我并没有创建它,加上你的代码在每次循环运行时都会强制布局stackview,所以你认为这也很好吗???