1

我有一个自定义 UIView 子类,它需要位于超级视图的底部。我使用以下方法设置视图的原点:

CGRect subviewFrame = subview.frame;

CGPoint newOrigin = CGPointMake(0, superview.bounds.size.height - subviewFrame.size.height);

subviewFrame.origin = newOrigin;

[subview setFrame:subviewFrame];

但是,这会将子视图(origin.y)直接放在父视图的视图框架之外。

框架外的子视图

如果我使用:

CGPoint newOrigin = CGPointMake(0, superview.bounds.size.height - subviewFrame.size.height * 2.0f);

我得到了我想要的结果,这是位于窗口底部的子视图。

框架内的子视图

我不明白为什么必须将子视图的高度乘以 2。

如果有人能告诉我我错过了什么,将不胜感激。谢谢!

4

2 回答 2

1

我使用 [UIScreen mainScreen].bounds 来获取初始帧,它不会补偿状态和导航栏。UIScreen applicationFrame:返回框架减去状态栏高度。我使用此方法并考虑导航栏高度(44.0)以获得所需的结果。

于 2013-04-16T21:59:01.213 回答
1

绘制 UIView 边界的有用代码。KADebugShowViewBounds(superview, [UIColor redColor]) 和 KADebugShowViewBounds(subview, [UIColor redColor])。您将看到红色的超级视图和子视图的边界。我认为问题应该是你的布局。

#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>

#ifndef KAViewDebugHelper_h
#define KAViewDebugHelper_h

#ifdef DEBUG
#define KADebugShowViewBounds(aView, aColor) \
do \
{ \
    UIColor *color = [(id)aColor isKindOfClass:[UIColor class]] ? aColor : [UIColor redColor]; \
    aView.layer.borderColor = color.CGColor; \
    aView.layer.borderWidth = 1.0f; \
} \
while(0)
#else
#define KADebugShowViewBounds(aView)
#endif
#endif
于 2013-04-18T10:38:38.483 回答