1

通常我需要简单地将视图向下移动 5 个像素。我的做法是这样的

view.frame = CGRectMake(view.frame.origin.x,
                        view.frame.origin.y + 5,
                        view.frame.size.width,
                        view.frame.size.height);

没有更简单的方法吗?:-/

4

7 回答 7

3

另一种解决方案

view.frame = CGRectOffset( view.frame, 0, 5 );
于 2013-01-09T20:34:51.840 回答
1

我在github上有一个宏,可以让你这样做

@morph(view.frame, _.origin.y += 5);

或者如果你想改变y 并且 height

@morph(view.frame, {
    _.origin.y += 5;
    _.size.height -= 5;
});
于 2014-05-27T22:47:37.920 回答
0

稍微好一些:

view.center = CGPointMake(view.center.x, view.center.y+5);
于 2013-01-09T20:20:13.577 回答
0

我有这些宏:

#define VIEW_INCREASE_Y(view, value) view.frame = CGRectMake(view.frame.origin.x,view.frame.origin.y+value,view.frame.size.width,view.frame.size.height)

然后你可以这样做:

VIEW_INCREASE_Y(customView, 25);
于 2013-01-09T20:27:18.120 回答
0

也许我应该为 UIView 类写一堆类别。

就像是

-(void)changeFrameOriginHorizontally:(NSInteger)paramHorizontalChange
                          vertically:(NSInteger)paramVerticalChange;

-(void)changeFrameSizeHorizontally:(NSInteger)paramHorizontalChange
                        vertically:(NSinteger)paramVerticalChange;

我不喜欢原始帖子中的解决方案的主要原因是它对代码非常不友好且过于冗长。

我会允许负值和正值,nil 表示没有变化。

你们有什么感想?

于 2013-01-09T20:35:32.280 回答
0

如果你想走类别路线,你应该给它一个前缀以避免方法名称冲突。

例如

- (void)ps_addOffset:(CGPoint)offset;
{
    self.frame = CGRectIntegral(CGRectOffset(self.frame, offset.x, offset.y));
}
于 2013-01-09T21:21:56.657 回答
0

我喜欢使用宏:

#define width(a) a.frame.size.width
#define height(a) a.frame.size.height
#define top(a) a.frame.origin.y
#define left(a) a.frame.origin.x
#define bottom(a) top(a)+height(a)
#define right(a) left(a)+width(a)

#define FrameReposition(a,top,left) a.frame = CGRectMake(x, y, width(a), height(a))

......

FrameReposition(myView,0,0);
于 2013-01-09T21:26:03.200 回答