我有一个自定义的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的视图框之外。
如果我使用:
CGPoint newOrigin = CGPointMake(0, superview.bounds.size.height - subviewFrame.size.height * 2.0f);
我得到了我想要的结果,这是坐在窗口底部的子视图。
我不明白为什么我必须将子视图的高度乘以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