1

我在 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 内的 imageview 上调用 addsubview 以编程方式将其添加到 stackview 中,但标签被放置在单元格的最顶部。

4

2 回答 2

0

您有两种可能的方法来实现这一点(顺便说一句,我鼓励您像我一样简化代码):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 中编译我的代码)。

于 2016-04-13T09:02:32.433 回答
0

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

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

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

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

您可以像这样访问它。

lastImageView.backgroundColor = [UIColor yellowColor];

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

[lastImageView addSubview:self.titleTextLabel];

于 2015-11-24T17:59:53.630 回答