Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.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
Ios 如果另一个项目没有';不存在_Ios_Swift_Xcode_Alignment_Cell - Fatal编程技术网

Ios 如果另一个项目没有';不存在

Ios 如果另一个项目没有';不存在,ios,swift,xcode,alignment,cell,Ios,Swift,Xcode,Alignment,Cell,我正在使用UICollectionView显示项目。“我的单元格”在底部标签中包含ImageView和。 当ImageView没有图像时,如何在单元格中心制作标签?让我们说: if ("no image in ImageView ") { ImageView.setActive = false "what to do here?" 如何将标签居中?当然,我可以设置约束值=cellHeight/2 但是有没有其他办法呢?或者我可以在Xcode编辑器中这样做吗?试试这个Swift 4.1 在s

我正在使用UICollectionView显示项目。“我的单元格”在底部标签中包含ImageView和。 当ImageView没有图像时,如何在单元格中心制作标签?让我们说:

if ("no image in ImageView ") { 
ImageView.setActive = false
"what to do here?"
如何将标签居中?当然,我可以设置约束值=cellHeight/2
但是有没有其他办法呢?或者我可以在Xcode编辑器中这样做吗?

试试这个Swift 4.1

  • 在stackView(单元格内)中添加containerViews
  • 将图像视图和标签添加到容器视图中
  • 隐藏其中一个并在堆栈视图中运行
    layoutifneed()
使用singleView项目的工作示例(使用按钮切换)。相同的代码应该在
UITableView
UICollectionView
的单元格内工作

您必须在单元格内添加
UIStackView
,并应用
top
bottom
left
right
锚定

在这个示例中,我使用一个按钮来切换视图,您可以在imageView中使用didSet{}来隐藏/显示containerView

import UIKit
class ViewController: UIViewController {
    var stackView: UIStackView!
    var topView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        topView = UIView()
        topView.backgroundColor = .yellow
        let bottomView = UIView()
        bottomView.backgroundColor = .cyan
        stackView = UIStackView(arrangedSubviews: [topView, bottomView])
        stackView.distribution = .fillEqually
        stackView.axis = .vertical
        self.view.addSubview(stackView)
        stackView.centerWithSize(size: CGSize(width: 100, height: 200))
        let imageView = UIImageView()
        imageView.image = UIImage(named: "hexagon.png")
        topView.addSubview(imageView)
        imageView.centerWithSize(size: CGSize(width: 30, height: 30))
        let label = UILabel()
        label.text = "TEXT"
        label.font = UIFont(name: "Helvetica", size: 20)
        bottomView.addSubview(label)
        label.centerWithSize(size: CGSize(width: 100, height: 100))
        addButton()
    }
    func addButton() {
        let button = UIButton(type: UIButtonType.system) as UIButton
        button.titleLabel?.font = UIFont.systemFont(ofSize: 16.0)
        button.setTitle("TOGGLE", for: .normal)
        button.addTarget(self, action: #selector(toggle), for: .touchUpInside)
        button.frame = CGRect(x: 0, y: 50, width: 100, height: 30)
        self.view.addSubview(button)
    }
    @objc func toggle(sender: UIButton) {
        topView.isHidden = topView.isHidden == true ? false : true
        stackView.layoutIfNeeded()
    }
} 
extension UIView {
   func centerWithSize(size: CGSize) {
       self.translatesAutoresizingMaskIntoConstraints = false
       self.widthAnchor.constraint(equalToConstant: size.width).isActive = true
       self.heightAnchor.constraint(equalToConstant: size.height).isActive = true
       self.centerXAnchor.constraint(equalTo: self.superview!.centerXAnchor).isActive = true
       self.centerYAnchor.constraint(equalTo: self.superview!.centerYAnchor).isActive = true
    }
}

可以在视图中添加图像视图和标签。将堆栈视图分布设置为均匀填充。如果图像视图中没有图像,请隐藏图像视图。你的标签将居中。好主意,我会试试,但是当我的单元格可以调整大小时,使用UIStackView可以吗?让我知道它是否有效。不,它不起作用,console抱怨很多无法处理约束。我会做两件事。(2) 将图像视图和标签*都设置为表单元格的对等对象,这样就不需要让一个视图依赖于另一个视图——当然,现在需要使用前面的视图。(2) 使用
centerYAnchor
centerXAnchor
代替框架值,框架值可能是
cellHeight/2
。但是你真的应该发布更多的代码来帮助我们。谢谢你的解决方案。但由于单元格大小的动态变化,它无法工作。我做了一个收集视图。单元格大小因图片大小和标题字符串长度而异。