无法在故事板上移动自定义 UIView

Posted

技术标签:

【中文标题】无法在故事板上移动自定义 UIView【英文标题】:Can not move custom UIView on storyboard 【发布时间】:2017-04-23 14:29:42 【问题描述】:

我已经创建了自定义 UIView

import UIKit
@IBDesignable
class CategoryIcon: UIView 
let pi:CGFloat = CGFloat(M_PI)

@IBInspectable var circleColor:UIColor = UIColor.green
@IBInspectable var width:CGFloat = 10
@IBInspectable var radius: CGFloat = 20

override func draw(_ rect: CGRect) 

    center = CGPoint(x:bounds.width/2 ,y:bounds.height/2)
    let path = UIBezierPath(ovalIn: rect)
    path.lineWidth = width
    circleColor.setStroke()
    path.stroke()




但是当我将它添加到故事板时,我把它放在父视图的左上角并不重要as you can see dots shows that view has moved but drawings are out of view and at the left top

问题是什么,如何解决?

【问题讨论】:

您是不是想说,无论您尝试将视图放在哪里,它始终处于相同的位置?或者当您尝试更改位置时位置是否会发生变化。 @joshLor 无论我移动它,它总是停留在父视图的左上角。但问题是,如果您查看我在表示视图边界的 8 个点中提供的链接表明它已经移动,实际上我绘制的内容不在父视图左上角的 UIView 中 你能展示一下你是如何在视图控制器中实现它的吗? 2 问题:1. 您是否有代码在您的视图中没有显示。 2. center 是关键字吗?因为我从来没有使用过你实现路径的方法。 @joshLor 不,当我尝试用圆弧画圆时,中心来自上一部分。我为 UIView 拥有的所有代码在课外或课外什么都不做。 【参考方案1】:

从您的 draw(rect:) 方法中删除以下行:

    center = CGPoint(x:bounds.width/2 ,y:bounds.height/2)

通常不建议在执行绘图代码时更改视图的状态。但在这种特殊情况下,您将根据其 bounds 的原点更改视图的 frame 的位置,通常为 (0, 0),除非您已修改界别处。目前尚不清楚您希望通过这样做来完成什么,但它实际上所做的是将视图移动到左上角。

【讨论】:

非常感谢。事情是我最初是用弧线绘制的,在这种情况下我使用的是中心。然后,当我切换到椭圆时,我没有删除它。不知怎的错过了。感谢您的帮助。

以上是关于无法在故事板上移动自定义 UIView的主要内容,如果未能解决你的问题,请参考以下文章

无法在 UIButton 故事板上添加操作

故事板中的自定义 UIView

自定义字体显示在故事板上,但不在模拟器、设备上

以编程方式更改故事板上的 UIView 的大小

如何从位于故事板上的视图控制器获取子视图

故事板约束不影响自定义 UiView 大小