Ios Superview中的自定义UIView放置

Ios Superview中的自定义UIView放置,ios,uiview,frame,subview,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];

我有一个自定义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


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

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

绘制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
#导入
#进口
#ifndef Kaviewh
#定义KAViewDebugHelper_h
#ifdef调试
#定义KADebugShowViewBounds(aView、aColor)\
做\
{ \
UIColor*color=[(id)aColor是类:[UIColor类]]?aColor:[UIColor redColor]\
aView.layer.borderColor=color.CGColor\
aView.layer.borderWidth=1.0f\
} \
而(0)
#否则
#定义视图边界(aView)
#恩迪夫
#恩迪夫

用一张图片来表达你的意思怎么样。我看不出你的代码有什么问题。当然。。。对不起,尺码太大了。谢谢我肯定这和导航栏有关。与其将视图乘以2,不如减去44.0,然后再减去子视图。我相信你会得到你想要的东西,并且明白为什么。是的,你是对的。我还必须为状态栏减去20。我没有意识到我应该使用UIScreen applicationFrame:使窗口减去状态栏,并补偿导航栏。谢谢