UIStackView 中的图像未四舍五入

Posted

技术标签:

【中文标题】UIStackView 中的图像未四舍五入【英文标题】:Images not being rounded in UIStackView 【发布时间】:2018-09-13 13:14:37 【问题描述】:

我正在尝试对几张图像进行四舍五入并将它们添加到堆栈视图中,但由于某种原因它无法正常工作。基本上,我有一个包含所有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

【问题讨论】:

【参考方案1】:

你可以试试

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

【讨论】:

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

以上是关于UIStackView 中的图像未四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

调整图像大小以适合 xcode 故事板中的 Ui 图像视图

图像未在UIStackView中舍入

iOS 中常用的几种函数 (向上,向下,四舍五入)取整

为啥 UIImageView 在滚动之前不显示四舍五入?

JS 中的四舍五入

访问中的四舍五入