我使用以下代码更改UIView的位置,而不更改视图的大小.
CGRect f = aView.frame;
f.origin.x = 100; // new x
f.origin.y = 200; // new y
aView.frame = f;
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法来改变视图位置?
Tom*_*ift 225
aView.center = CGPointMake(150, 150); // set center
Run Code Online (Sandbox Code Playgroud)
要么
aView.frame = CGRectMake( 100, 200, aView.frame.size.width, aView.frame.size.height ); // set new position exactly
Run Code Online (Sandbox Code Playgroud)
要么
aView.frame = CGRectOffset( aView.frame, 10, 10 ); // offset by an amount
Run Code Online (Sandbox Code Playgroud)
编辑:
我还没有编译它,但它应该工作:
#define CGRectSetPos( r, x, y ) CGRectMake( x, y, r.size.width, r.size.height )
aView.frame = CGRectSetPos( aView.frame, 100, 200 );
Run Code Online (Sandbox Code Playgroud)
gca*_*amp 32
我有同样的问题.我做了一个简单的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
Run Code Online (Sandbox Code Playgroud)
.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
Run Code Online (Sandbox Code Playgroud)
lxt*_*lxt 12
UIView也有一处center房产.如果你只想移动位置而不是调整大小,你可以改变它 - 例如:
aView.center = CGPointMake(50, 200);
否则你会按照发布的方式进行.
我发现了一个类似的方法(它使用类别为好)与gcamp的答案,帮助我大大这里.在你的情况下就像这样简单:
aView.topLeft = CGPointMake(100, 200);
Run Code Online (Sandbox Code Playgroud)
但是如果你想要例如水平居中并且左边有另一个视图你可以简单地:
aView.topLeft = anotherView.middleLeft;
Run Code Online (Sandbox Code Playgroud)
CGRectOffset此后已被instance方法代替offsetBy。
https://developer.apple.com/reference/coregraphics/cgrect/1454841-offsetby
例如,以前是
aView.frame = CGRectOffset(aView.frame, 10, 10)
Run Code Online (Sandbox Code Playgroud)
现在将是
aView.frame = aView.frame.offsetBy(dx: CGFloat(10), dy: CGFloat(10))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118547 次 |
| 最近记录: |