Superview中的自定义UIView放置

时间:2013-04-16 17:12:44

标签: ios uiview frame subview

我有一个自定义的UIView子类,需要位于superview的底部。我使用:

设置视图的原点
CGRect subviewFrame = subview.frame;

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

subviewFrame.origin = newOrigin;

[subview setFrame:subviewFrame];

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

Subview outside of frame

如果我使用:

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

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

Subview inside of frame

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

#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