如何将标签添加到UIStackView的一个特定排列的SubView中



我在swift中为"ViewController"编写了以下代码类ViewController:UIViewController,UITableViewDelegate,UITableViewDataSource{

@IBOutlet weak var imgTableView:UITableView!
let imgList = ["1.png", "2.png", "3.png" , "4.png"]
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.imgList.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CellID", forIndexPath: indexPath) as? ImgTableViewCell
    cell?.coverImage.image = UIImage(named: imgList[0])
    for intValue in 1..<4
    {
        let stackViewImages = UIImageView()
        stackViewImages.image = UIImage(named: imgList[intValue])
        cell?.imgStackView.addArrangedSubview(stackViewImages)
    }
    return cell!
}

}

+++++++++++++++++++++++

类ImgTableViewCell:UITableViewCell{

@IBOutlet weak var coverImage:UIImageView!
@IBOutlet weak var imgStackView:UIStackView!
override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    // Configure the view for the selected state
}

}

如何将标签添加到stackview中的最后一张照片。我尝试创建一个新标签,并通过在stackview内的imageview上调用addsubview以编程方式将其添加到stackview中,但标签被放置在单元格的最顶部。

因为您的UIStackView包含4个UIImageView。您可以使用UIStackView的index属性来访问其中的对象。在StackView中插入对象的方式-insertArrangedSubView:atIndex

StackView索引从0开始,作为目标C中的其他容器对象。

在堆栈视图中创建一个指向图像视图的指针,如下所示:

UIImageView*lastImageView=[stackView.subviews objectAtIndex:3]

你可以这样访问它。

lastImageView.backgroundColor=[UIColor yellowColor]

现在添加任何其他子视图,例如UILabel,假设您的标签名称是titleTextLabel,而不是

[lastImageView addSubview:self.titleTextLabel]

您有两种可能的方法来实现这一点(顺便说一句,我鼓励您像我一样精简代码):1) 只需添加标签作为最后一个堆栈视图,如下所示:

if let sv = cell?.imgStackView {
    for i in 1..<4 {
        let iv = UIImageView()
        iv = UIImage(named: imgList[i])
        sv.addArrangedSubview(iv)
    }
    let l = UILabel()
    l.text = "the last image"
    l.frame.size.width = cell?.imgStackView.frame.width
    l.numberOfLines = 0
    l.sizeToFit()
    sv.addArrangedSubview(t)
}

2) 或者,如果您需要将标签放在与上一张图像相同的堆栈视图单元格中,请使用约束将其定位在您想要的位置,如下所示,假设您想要标签放在图像视图下方:

if let sv = cell?.imgStackView {
    let n = 3
    for i in 1...n {
        let iv = UIImageView()
        iv = UIImage(named: imgList[i])
        sv.addArrangedSubview(iv)
        // last image: add a label underneath the image view
        if i == n {
            let l = UILabel()
            l.text = "the last image"
            l.frame.size.width = cell?.imgStackView.frame.width
            l.numberOfLines = 0
            l.sizeToFit()
            // Add the bottom-top constraint
            iv.translatesAutoresizingMaskIntoConstraints = false
            iv.addConstraints([
                NSLayoutConstraint(item: l, attribute: .Top,   relatedBy: .Equal, toItem: iv, attribute: .Bottom, multiplier: 1, constant: 0),
            ])
        }
    }
}

希望能有所帮助(顺便说一句,我没有用Xcode编译代码)。

相关内容

  • 没有找到相关文章

最新更新