UIView.Frame 属性

定义

视图相对于其容器的坐标。

public virtual CoreGraphics.CGRect Frame { [Foundation.Export("frame")] get; [Foundation.Export("setFrame:")] set; }
member this.Frame : CoreGraphics.CGRect with get, set

属性值

此属性的值以磅为单位,而不是以像素为单位。

属性

注解

属性 FrameSuperview的坐标系统表示。 (属性 BoundsthisUIView坐标系统表示。)

以下示例仅演示 的坐标系和值可能与 的坐标系和值不同的UIViewBounds一种方式Frame。 在本例中, UIImageView 将放置一个初始 Frame 源, {100,100} 其大小 {100,100}为 。 旋转后,边界框的 Frame 原点和大小将移动:用于容纳旋转的原点和大小以包含框的 {100,100} 对角线。 Bounds遗骸 [{0,0},] 的 flowerView{100,100}。

var flowerView = new UIImageView(new RectangleF(100, 100, 100, 100)) {
	Image = UIImage.FromFile("flower.png"),
	ContentMode = UIViewContentMode.Center,
	ClipsToBounds = true
};

flowerView.Transform = CGAffineTransform.MakeRotation((float) Math.PI / 4);
view.AddSubview(flowerView);            

对此属性进行更改后, Center 会使用新位置更新 , Bounds 使用新维度进行更新,并重新布局子视图。

除非将 属性设置为 Redraw,否则更改此属性不会触发对 Draw(CGRect)ContentMode调用。

至少在 iOS 6 及更高版本中,更改此属性会导致子视图的重新布局,即使尺寸相同。 这可能会导致性能问题,因为某些视图 ((如 UITableView) )在布局时可能会执行一些非常昂贵的计算。

如果 ContentMode 属性设置为 Redraw,则可以在更新 Center 属性而不是更新 Frame 时避免重绘视图,因为该属性只会移动视图,而不会触发对 LayoutSubviews()的调用。

此属性参与隐式动画协议,将其更改为事务外部将触发其值的隐式动画。

如果将属性更改为 Transform 不表示标识矩阵的矩阵,则更改此属性可能会产生意外后果。 在这些情况下,应改为直接更新 CenterBounds

适用于