根据框架调整视图边界的大小



我现在的情况是我正在尝试调整标签的大小,我可以轻松地使用UIPinchGestureRecognizer调整它的大小,但这所做的只是调整标签框架的大小。

func handleScale(recognizer: UIPinchGestureRecognizer)
{
    recognizer.view!.transform = CGAffineTransformScale(recognizer.view!.transform,
        recognizer.scale, recognizer.scale)
    recognizer.scale = 1
    recognizer.view!.frame = CGRectMake(recognizer.view!.frame.minX,recognizer.view!.frame.minY, recognizer.view!.frame.width, recognizer.view!.frame.height)  
}   

我希望能够更改标签的边界,以便文本在新框架尺寸中再次呈现。我尝试只调整比例尺中标签边界的大小,但无法正常工作。

我在单击时制作了一个按钮,它根据标签框设置标签边界。虽然它似乎不起作用。

    label.bounds = CGRectMake(0, 0, CGRectGetWidth(self.label.frame), CGRectGetHeight(self.label.frame))

上面所做的是将其大小调整为与框架不同的坐标。

这是按钮操作的打印日志:

Frame Before(-54.2193053279009,279.213449112017,513.438610655802,85.5731017759669)
Bounds Before(0.0,0.0,300.0,50.0)
label.bounds = CGRectMake(0, 0, CGRectGetWidth(self.label.frame), CGRectGetHeight(self.label.frame))
Frame After(-236.8653448536,248.7724425244,878.7306897072,146.4551149512)
Bounds After(0.0,0.0,513.438610655802,85.5731017759669)

所做的是一旦设置了边界,它就会改变帧的值。有谁知道如何解决这个问题?

我尝试从以前的帧值设置帧,但仍然不起作用。

您遇到了UIView setTransform:文档中描述的场景:

警告

如果此属性不是标识转换,则帧属性的值未定义,因此应忽略。

如果您的目标是简单地在视觉上缩小标签,只需应用变换而不调整框架。

如果您打算缩小标签的几何矩形,同时保持文本大小相同,则可以使用 CGRectApplyAffineTransform(CGAffineTransformMakeScale(recognizer.scale, recognizer.scale)) 生成一个新框架。 如果发现文本仍未更新,则应尝试在标签上调用setNeedsLayoutsetNeedsDisplay(取决于其绘图的处理方式)。

最新更新