【问题标题】:Dynamic UIView size动态 UIView 大小
【发布时间】:2015-12-11 01:01:54
【问题描述】:

我遇到的问题是 UIView 以某种方式获得了不需要的填充。似乎 UIView 框架根据 UIImage 高度调整自身大小。

These are my constraints on the UIView

Illustrative GIF

单元格配置:

// Configure the cell...
    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: cell.testView.frame.width, height: cell.testView.frame.height))

    imageView.image = UIImage(named: "eiffel.JPG")
    imageView.autoresizingMask = .FlexibleWidth
    imageView.contentMode = .ScaleAspectFit
    imageView.center = cell.testView.center
    imageView.clipsToBounds = true
    imageView.translatesAutoresizingMaskIntoConstraints = false


    cell.testView.addSubview(imageView)

    let bottomMarginConstraint = NSLayoutConstraint(item: imageView, attribute: .Bottom, relatedBy: .Equal, toItem: cell.testView, attribute: .Bottom, multiplier: 1, constant: 0)

    let topMarginConstraint = NSLayoutConstraint(item: imageView, attribute: .Top, relatedBy: .Equal, toItem: cell.testView, attribute: .Top, multiplier: 1, constant: 0)

    let trailingMarginConstraint = NSLayoutConstraint(item: imageView, attribute: .Left, relatedBy: .Equal, toItem: cell.testView, attribute: .Left, multiplier: 1, constant: 0)

    let leadingMarginConstraint = NSLayoutConstraint(item: imageView, attribute: .Right, relatedBy: .Equal, toItem: cell.testView, attribute: .Right, multiplier: 1, constant: 0)

    //let widthConstraint = NSLayoutConstraint(item: imageView, attribute: .Width, relatedBy: .Equal, toItem: .None, attribute: .NotAnAttribute, multiplier: 1, constant: imageView.superview!.frame.width)

    let constraints = [bottomMarginConstraint, topMarginConstraint, leadingMarginConstraint, trailingMarginConstraint]

    cell.testView.addConstraints(constraints)

UIView 是浅绿色背景的,而 Cell 是粉红色背景的。

【问题讨论】:

    标签: ios swift uiview uiimageview autolayout


    【解决方案1】:

    这可能是由于使用自动布局时默认添加的边距。 从情节提要中取消选中它。

    • 取消选中"Constrain to margin"

    或者

    • 取消选中"Relative To Margin"

    • 尝试以编程方式删除

    imageView.layoutMargins = UIEdgeInsetsMake(0, 0, 0,0);

    查看更多: iOS8 Auto layout programatically pin to relative layout margin

    Apple Doc Autolayout

    【讨论】:

    【解决方案2】:

    我认为您也可以在 xib 中绘制 UIImageView。当Auto layout 中的图像更改时,UIImageView 的大小也会更改。您只需要确认UIImageView的位置即可。

    tableView需要知道这个cell的高度时,返回cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize).size.height + 1计算Cell的contentView和分隔线1.f的高度

    【讨论】:

      【解决方案3】:

      我最终做的是根据图像的宽度调整图像大小,然后根据重新计算的高度修改高度约束。

      【讨论】:

        猜你喜欢
        • 2015-05-07
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多