我在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编译代码)。