简单的方法来改变UIView的位置?

我用下面的代码改变UIView的位置,而不改变视图的大小。

CGRect f = aView.frame; f.origin.x = 100; // new x f.origin.y = 200; // new y aView.frame = f; 

有没有更简单的方法来改变视图的位置?

 aView.center = CGPointMake(150, 150); // set center 

要么

 aView.frame = CGRectMake( 100, 200, aView.frame.size.width, aView.frame.size.height ); // set new position exactly 

要么

 aView.frame = CGRectOffset( aView.frame, 10, 10 ); // offset by an amount 

编辑:

我还没有编译,但它应该工作:

 #define CGRectSetPos( r, x, y ) CGRectMake( x, y, r.size.width, r.size.height ) aView.frame = CGRectSetPos( aView.frame, 100, 200 ); 

我有同样的问题。 我做了一个简单的UIView类别来解决这个问题。

。H

 #import <UIKit/UIKit.h> @interface UIView (GCLibrary) @property (nonatomic, assign) CGFloat height; @property (nonatomic, assign) CGFloat width; @property (nonatomic, assign) CGFloat x; @property (nonatomic, assign) CGFloat y; @end 

.M

 #import "UIView+GCLibrary.h" @implementation UIView (GCLibrary) - (CGFloat) height { return self.frame.size.height; } - (CGFloat) width { return self.frame.size.width; } - (CGFloat) x { return self.frame.origin.x; } - (CGFloat) y { return self.frame.origin.y; } - (CGFloat) centerY { return self.center.y; } - (CGFloat) centerX { return self.center.x; } - (void) setHeight:(CGFloat) newHeight { CGRect frame = self.frame; frame.size.height = newHeight; self.frame = frame; } - (void) setWidth:(CGFloat) newWidth { CGRect frame = self.frame; frame.size.width = newWidth; self.frame = frame; } - (void) setX:(CGFloat) newX { CGRect frame = self.frame; frame.origin.x = newX; self.frame = frame; } - (void) setY:(CGFloat) newY { CGRect frame = self.frame; frame.origin.y = newY; self.frame = frame; } @end 

UIView也有一个center属性。 如果你只是想移动位置而不是resize,你可以改变它 – 例如:

aView.center = CGPointMake(50, 200);

否则,你会按照你张贴的方式去做。

我find了一个类似的方法(它也使用了一个类别),gcamp的答案在这里帮了我很大的忙。 在你的情况是这样简单:

 aView.topLeft = CGPointMake(100, 200); 

但是如果您想要例如将水平中心与另一个视图的左边alignment,则可以简单地:

 aView.topLeft = anotherView.middleLeft; 

在使用Autolay的情况下,所选答案中的解决scheme不起作用。 如果您使用Autolayout进行查看,请查看此答案 。

 aView.frame = CGRectMake(100, 200, aView.frame.size.width, aView.frame.size.height); 

在我的工作中,我们不使用macros。 所以@TomSwift提供的解决scheme给了我灵感。 我看到CGRectMake的实现,并创build相同的CGRectSetPos,但没有macros。

 CG_INLINE CGRect CGRectSetPos(CGRect frame, CGFloat x, CGFloat y) { CGRect rect; rect.origin.x = x; rect.origin.y = y; rect.size.width = frame.size.width; rect.size.height = frame.size.height; return rect; } 

要使用我只把框架,X和Y

 viewcontroller.view.frame = CGRectSetPos(viewcontroller.view.frame, 100, 100); 

为我工作^ _ ^

如果有人需要Swift扩展轻松地改变UIView边缘 – 你可以使用这个

 view.top = 16 view.right = self.width view.bottom = self.height self.height = view.bottom 

CGRectOffset已被replace为实例方法offsetBy

https://developer.apple.com/reference/coregraphics/cgrect/1454841-offsetby

例如,曾经是什么

 aView.frame = CGRectOffset(aView.frame, 10, 10) 

现在是

 aView.frame = aView.offsetBy(dx: CGFloat(10), dy: CGFloat(10)) 

Swift 3不接受“Make”,Swift 3的答案是Swift 3。

 aView.center = CGPoint(x: 200, Y: 200) 

另一种方式:

 CGPoint position = CGPointMake(100,30); [self setFrame:(CGRect){ .origin = position, .size = self.frame.size }]; 

这我保存大小参数,只改变原点。

@TomSwift Swift 3的答案

 aView.center = CGPoint(x: 150, y: 150); // set center 

要么

 aView.frame = CGRect(x: 100, y: 200, width: aView.frame.size.width, height: aView.frame.size.height ); // set new position exactly 

要么

 aView.frame = aView.frame.offsetBy(dx: CGFloat(10), dy: CGFloat(10)) // offset by an amount