使UIImage适合UIView

时间:2016-05-31 12:05:48

标签: swift uitableview uiimageview

我在UIImageView中使用正确的宽高比时,很难让图像适合。

最初从plist插入核心数据的所有图像都符合正确的宽高比,但是当使用应用程序(从现有图像库)添加图像时,三个视图中的两个视图中的图像看起来比视图大本身 - 这样只显示照片的左上角。在下面的屏幕截图中,表格的顶行显示通过plist添加的图像,接下来的两行(MY RECORDS)显示不限于视图的照片。

enter image description here

上面视图中的单元格是以通常的方式创建的,然后在其自己的方法中进行配置,其中定义了它的属性。

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
    self.configureCell(cell, indexPath: indexPath)
    return cell
}

    func configureCell(cell: UITableViewCell, indexPath: NSIndexPath)
{
    let record = fetchedResultsController.objectAtIndexPath(indexPath) as! Record
    cell.textLabel!.text = record.subject
    cell.detailTextLabel!.text = record.shortDetails

    if let imageArray = imagesForRecord(record)
    {
        if imageArray.count > 0
        {
            cell.imageView?.contentMode = .ScaleAspectFit
            cell.imageView?.clipsToBounds = true
            cell.imageView?.image = imageArray[Int(record.featureImageIndex)]
        }
    }
}

但是图像不会缩放,也不会在imageView的范围内剪切。最初加载的图像(如熊)不需要设置contentMode或clipsToBounds。

我在不同的视图控制器中有相同的问题(称之为VC2),但此视图是使用故事板定义的。我的UIImage视图受限于具有固定大小约束的UIView的所有方面。 UIImage视图设置为Aspect Fit,但是当我从设备库中设置图像时,它看起来像上面的图片 - 宽高比是正确的,但只显示图像的上角。

enter image description here

enter image description here

在另一个视图中,我有与VC2几乎相同的故事板布局,但这里按预期工作。我看不出约束,属性和使用相同照片(来自库)的任何差异。

enter image description here

enter image description here

我无法看到任何差异,我无法想象如何从这里进行调试。毫无疑问,我误解了关于Aspect Fit或如何应用它的一些非常简单的事情。

4 个答案:

答案 0 :(得分:1)

问题是如果您使用默认的imageView,它不包含任何约束。当您加载更大的图像时,它将显示完整的大小。

两种解决方案:

  • 创建单元格模型,插入imageView,并在故事板中为其赋予约束。
  • 检查您添加到默认imageView的约束。

例如:

let horizontalConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
newView.translatesAutoresizingMaskIntoConstraints = false
cellView.addConstraint(horizontalConstraint)

答案 1 :(得分:0)

尝试添加此cell.imageView?.layer.masksToBounds = true。它可以帮助你

    cell.imageView?.contentMode = .ScaleAspectFit
    cell.imageView?.clipsToBounds = false
    cell.imageView?.layer.masksToBounds = true
    cell.imageView?.image = imageArray[Int(record.featureImageIndex)]

答案 2 :(得分:0)

  • 使用您需要的设计创建自定义单元格。

  • 在左上角和下方制作约束,并设置宽度 的UIImageView。

  • 使用TableView添加自定义Xib。

我希望这会帮助你......

答案 3 :(得分:0)

可能会添加以下内容:

class func imageWithImage(image: UIImage, scaledToSize newSize: CGSize) -> UIImage {
    //UIGraphicsBeginImageContext(newSize);
    UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
    image.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))
    var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage
}