【问题标题】:iOS: Solid Border Outside UIViewiOS:UIView 外的实线边框
【发布时间】:2016-04-12 13:31:02
【问题描述】:

layer 的 borderWidth 和 borderColor 属性在视图内部绘制边框。 Remykits 指出了这一点here。

layer 的 shadow... 属性不能用于创建既出现在所有四个边上 并且不透明的边框> 因为我展示了here。

我未能在该问题中指定(以及我打开新问题的原因)是我希望边框在视图之外。正如建议的那样,增加视图的frame 以补偿丢失的空间是行不通的;我使用的是UIImageView,所以即使frame 增加,image 仍然被裁剪。

另一个建议是将UIImageView 的contentMode 更改为.Center,同时更改视图的大小,但这不起作用,因为视图的大小不合适。

我首先想到的解决方案是在这个UIImageView“后面”创建另一个UIView,并给它一个backgroundColor 来模仿边框的效果。我还想过创建一个UImageView 的自定义子类。但是,这两种操作都涉及基于视图的frame 进行计算。我遇到了很多问题,frame 没有在适当的时间由 AutoLayout 设置,等等。

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

要清楚,我正在寻找的是:

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

【问题讨论】:

  • 您是否尝试更改UIImage 的大小并将其放入UIImageView,哪个背景颜色更改为边框颜色?还将contentMode 设置为居中。如果您使用 imageview 裁剪图像,这可能会起作用。

标签: ios swift layout uiview autolayout


【解决方案1】:

啊哈!将 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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多