繁体   English   中英

ios Swift tableView 以编程方式查看标签和图像的动态单元格约束

[英]ios Swift tableView dynamic cells constraints for labels and image programatically

我有标签和图像。 我想要图像上方的标签。 并且图像没有前导和尾随边距限制。

我已经尝试了以下限制,但似乎无法做到正确。 并且单元格的行高在横向模式下不会相应调整。

    addSubview(videolabel1)
    videolabel1.translatesAutoresizingMaskIntoConstraints = false
    videolabel1.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20).isActive = true
    videolabel1.trailingAnchor.constraint(equalTo: trailingAnchor
        , constant: 20).isActive  = true

    videolabel1.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true
    videolabel1.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 20).isActive = true


    addSubview(image)
    image.translatesAutoresizingMaskIntoConstraints = false
    image.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
    image.trailingAnchor.constraint(equalTo: trailingAnchor).isActive  = true
    image.heightAnchor.constraint(equalToConstant: 150).isActive = true
    image.widthAnchor.constraint(equalTo: videoimage.heightAnchor
        , multiplier: 16/9).isActive = true

    image.topAnchor.constraint(equalTo: videodate.bottomAnchor, constant: 12).isActive = true
    image.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 12).isActive = true

根据顶部和底部的顺序视图设置底部和顶部锚点。 在这里,您将 videolabel1 和 videodate 的底部锚点设置为底部锚点,这是错误的:-

设置 videoLabel 尾随和顶部锚点并删除底部锚点:-

videolabel1.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -20).isActive  = true
videolabel1.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true

如下设置 videoLabel 尾随锚点并删除底部锚点:-

videodate.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -20).isActive  = true

此外,删除 imagview 的底部锚点并设置底部锚点常量,如下所示: -

videotitle.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -12).isActive = true

当您想以水平或垂直方式排列视图时,请尝试使用UIStackView UIStackView可以为您处理大多数约束。 您可以尝试添加一个垂直方向的父UIStackView ,它包含另一个水平方向的UIStackView (这个UIStackView将包含两个UILabel's ),然后是UIImageView和另一个UILabel

parentStackView = UIStackView()
parentStackView.axis = .vertical
parentStackView.distribution = .equalSpacing
parentStackView.translatesAutoresizingMaskIntoConstraints = false
self.contentView.addSubview(parentStackView)
parentStackView.topAnchor.constraint(equalTo: self.contentView.topAnchor).isActive = true
parentStackView.widthAnchor.constraint(equalTo: self.contentView.widthAnchor, multiplier: 1).isActive = true
parentStackView.heightAnchor.constraint(equalTo: self.contentView.heightAnchor, multiplier: 1).isActive = true

parentStackView.isLayoutMarginsRelativeArrangement = true
parentStackView.addArrangedSubview(stackView)
stackView.axis = .horizontal
stackView.distribution = .equalSpacing
stackView.spacing = 10
stackView.addArrangedSubview(label)
label.text = "First Label";
stackView.addArrangedSubview(label2)
label2.text = "Second Label";
parentStackView.addArrangedSubview(imageView);
imageView.image = UIImage(named: "imageview");
NSLayoutConstraint.activate([imageView.heightAnchor.constraint(equalToConstant:UIScreen.main.bounds.width / 2) ]);
imageView.contentMode = .scaleAspectFill;
imageView.clipsToBounds = true;
parentStackView.addArrangedSubview(label3)
label3.text = "Vertical Label below Image";

结果将类似于:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM