iOS:UIView之外的Solid Border

时间:2016-01-07 23:57:07

标签: ios swift layout uiview autolayout

layer borderWidthborderColor属性在视图内部绘制边框。雷米基特指出了here

layer shadow...个属性不能用于创建边框,出现在所有四边 不透明,原因显示我here

我未能在该问题中指明(以及我打开新问题的原因)是我希望边框在视图外 。正如所建议的,增加视图的frame以补偿空间损失并不起作用;我使用了UIImageView,因此即使frame增加,image仍会被裁剪。

另一个建议是将contentMode的{​​{1}}更改为UIImageView,并结合更改视图的大小,但这不会作为视图工作不是合适的尺寸。

我首先想到的解决方案是创建另一个.Center""这个UIView,并给它一个UIImageView来模仿边界的效果。我还想过创建backgroundColor的自定义子类。然而,这两个行动方案都涉及根据视图的UImageView进行计算。我在适当的时候没有通过AutoLayout设置frame等问题,等等。

我想到的其他事情是以数字方式为图像添加边框或将图像定位在frame的特定部分。 (我对后者的尝试是UIImageView,这导致了一个奇怪的像素化图像。)

要清楚,我正在寻找的是: enter image description here

真的感觉应该有一种比创建新类或视图更简单的方法。任何帮助赞赏。

1 个答案:

答案 0 :(得分:0)

啊哈!将aykutt关于调整图像大小和更改conentMode的评论,Paul Lynch关于调整图像大小的answer以及rene(拯救生命)answer关于如何做你的子视图的评论不是列在viewDidLayoutSubviews

override func viewDidLayoutSubviews() {

    super.viewDidLayoutSubviews()

    self.myContainer.setNeedsLayout()
    self.myContainer.layoutIfNeeded()

    var width: CGFloat = 4 //the same width used for the border of the imageView
    var rect = CGRectInset(imageView.bounds, width, width)
    var size = CGSizeMake(rect.width, rect.height)
    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    image.drawInRect(CGRectMake(0, 0, size.width, size.height))
    var new = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    self.imageView.contentMode = .Center
    self.imageView.image = new

}