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 中的图像未四舍五入的主要内容,如果未能解决你的问题,请参考以下文章