2016-03-19 36 views
0

我在UIViewController中有一个UITableView,以及在我自己的自定义单元类中定义的1个原型单元。我在右上角UIImageView,具有顶部和后随区间的限制,以及一个固定的宽度和高度:如何在自定义UITableViewCell中创建UIImageVIew? (Swift)

In Interface Builder

是,当我运行该程序时,将创建该问题的TableView但该imageView过大:

At runtime

研究本网站上的一些类似的问题后,我得出的结论是:

仅当您为其分配 图像时,单元格的imageView才会显示并被设定大小。

我已经试图在自定义单元格类下面的代码,以及cellForRowAtIndexPath功能:

cell.imageView?.frame = CGRectMake(300, 52, 292, 136) 
cell.imageView?.clipsToBounds = true 
cell.contentView.addSubview(cell.imageView!) 

我缺少的东西或我该怎么办,以获得imageView的大小我”是否已经为它的约束?

预先感谢您!

+0

是的,你需要添加约束细胞的含有观点和没有必要设置ImageView的框架编程。 例如:http://postimg.org/image/utqzbrjn1/ –

+0

你可以在storyboard中给你的tableviewCell截图吗?如果您向我们展示您的约束条件,它会有所帮助广告将很高兴在'cellForRowAtIndexPath'下显示您的完整代码。 –

回答

0

出于兴趣,固定的宽度和高度约束是什么值?由于视图控制器的大小不同,很难区分界面生成器和设备屏幕截图。

我的建议与固定宽度和高度的限制,而是做掉:

•引脚图像视图到电池的底部的底部 - 这给图片查看它的高度。

•在图像视图中添加纵横比约束 - 这会根据图像的高度为图像视图提供宽度。

这意味着即使最终改变了单元格的高度,图像视图也会始终适合单元格内部。

虽然使用原型单元格和UITableViewCell子类的荣誉 - 我完全同意这种方法!

+0

感谢您的快速回复马修!我试过了你的建议,但它给了我相同的结果。宽度为292,高度为136.我应该提到该设备是iPhone 6. imageView是唯一的问题,它似乎是因为它的约束没有被应用。 – vblaga

+0

你可能提供更多代码围绕表视图本身的设置,以及cellForRowAtIndexPath:方法?那么我们可能会看到你是否在做一些你不应该做的事情,或者忘记做一些你应该做的事情! –

1

的UIView具有属性contentMode - 尽量把它定义为ScaleToFill:

self.someImage.contentMode = .ScaleToFill 
0

你的代码看起来模糊,虽然我您在使用自定义单元格级的同意。这样做是为了尝试下载所有图像集,如果无法下载,它将用保存在资产上的图像占位符替换图像。所有图像在加载时都具有相同的尺寸。

以下是您可以做的工作。这是您的自定义课程。

class SomeCell: UITableViewCell { 

    @IBOutlet weak var imgMain: UIImageView! 
    @IBOutlet weak var lblMain: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
     imgMain.layer.cornerRadius = 5.0 
     imgMain.clipsToBounds = true 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

    func configureCell(image: UIImage, text: String){ 
     imgMain.image = image 
     lblMain.text = text 
    } 

} 

然后在您的视图控制器

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 

    var somePics = ["http://www.something.com/pic1.jpg","http://www.something.net/pic2.jpg","http://www.something.com/pic3.jpg","http://www.something.com/pic4.jpg","http://www.something.net/pic5.jpg"] 

    var someTitles = ["Picture 1", "Picture 2", "Picture 3", "Picture 4", "Picture 5"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.delegate = self 
     tableView.dataSource = self 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     if let cell = tableView.dequeueReusableCellWithIdentifier("SomeCell") as? SomeCell { 

      var img: UIImage! 

      let url = NSURL(string: somePics[indexPath.row])! 

      if let data = NSData(contentsOfURL: url) { 
       img = UIImage(data: data) 
      }else { 
       img = UIImage(named: "somePlaceholderpic") 
      } 

      cell.configureCell(img, text: someTitles[indexPath.row]) 

      return cell 

     } else { 

      return SomeCell() 

     } 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return somePics.count 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

希望这有助于。 :)

1

感谢大家的帮助!

我犯了一个愚蠢的错误,引用了自定义单元的通用imageView?,而不是我用另一个名字制作的IB Outlet

错误:

cell.imageView?.image = UIImage(named: "whatever name") 

右:

cell.dogImageView.image = UIImage(named: "labrador") 
相关问题