我在UIImageView中使用正确的宽高比时,很难让图像适合。
最初从plist插入核心数据的所有图像都符合正确的宽高比,但是当使用应用程序(从现有图像库)添加图像时,三个视图中的两个视图中的图像看起来比视图大本身 - 这样只显示照片的左上角。在下面的屏幕截图中,表格的顶行显示通过plist添加的图像,接下来的两行(MY RECORDS)显示不限于视图的照片。
上面视图中的单元格是以通常的方式创建的,然后在其自己的方法中进行配置,其中定义了它的属性。
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,但是当我从设备库中设置图像时,它看起来像上面的图片 - 宽高比是正确的,但只显示图像的上角。
在另一个视图中,我有与VC2几乎相同的故事板布局,但这里按预期工作。我看不出约束,属性和使用相同照片(来自库)的任何差异。
我无法看到任何差异,我无法想象如何从这里进行调试。毫无疑问,我误解了关于Aspect Fit或如何应用它的一些非常简单的事情。
答案 0 :(得分:1)
问题是如果您使用默认的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
}