【问题标题】:Custom UIView Placement within SuperviewSuperview 中的自定义 UIView 放置
【发布时间】:2013-04-09 05:09:17
【问题描述】:

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

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

【问题讨论】:

  • 用一张图片来表达你的意思怎么样。我没有立即看到您的代码有任何问题。
  • 当然...对不起尺寸。谢谢!
  • 我确定它与导航栏有关。与其将您的视图乘以 2,不如减去 44.0 然后减去您的子视图。而且我相信你会得到你想要的确切的东西并理解为什么。
  • 是的,你是对的。我还必须为状态栏减去 20。我没有意识到我应该使用 UIScreen applicationFrame: 来获取窗口减去状态栏以及补偿导航栏。谢谢。

标签: ios uiview frame subview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    绘制 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-09
      • 2019-04-08
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多