父 UIView 不包含/剪切子视图

Posted

技术标签:

【中文标题】父 UIView 不包含/剪切子视图【英文标题】:Parent UIView not containing/clipping subviews 【发布时间】:2014-11-19 14:38:27 【问题描述】:

我正在尝试向 UITableView 添加页脚。该表是一个 cmets 表,页脚是用户输入他/她的 cmets 以进行发布的位置。所以很自然,我定义了一个 UIView 并在 UIView 内部添加了一个 UITextField 和一个 UIButton。 (左到右)。

问题是 UIView 不包含子视图。我希望孩子们在父页脚内垂直居中。我的代码如下。我究竟做错了什么?现在父视图显示为红色的薄板。与父级重叠的是高度大于父级的 UITextField 和 UIButon。

- (UIView *)tableView:(UITableView *)tv viewForFooterInSection:(NSInteger)section

    static UIView *footer =nil;
    if (nil == footer) 
        footer =[[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 70)];
        footer.backgroundColor=[UIColor redColor];

        self.commentInputTextView=[[UITextView alloc]initWithFrame:CGRectMake(0, 0, 240, 50)];
        self.commentInputTextView.delegate=self;
        self.commentInputTextView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
        self.commentInputTextView.backgroundColor=[UIColor greenColor];
        [footer addSubview:self.commentInputTextView];

        UIButton *post = [[UIButton alloc] initWithFrame:CGRectMake(250, 0, 60, 50)];
        post.backgroundColor=[UIColor blueColor];
        [post setTitle:@"Post" forState:UIControlStateNormal];
        [footer addSubview:post];
        [footer sizeToFit];
    
    return footer;

【问题讨论】:

【参考方案1】:

clipsToBounds 设置为是

footer.clipsToBounds = YES;

相关文档:

一个布尔值,用于确定子视图是否被限制在 视图的边界。

声明 SWIFT var clipsToBounds: Bool OBJECTIVE-C @property(nonatomic) BOOL clipsToBounds 讨论 设置这个值 为 YES 会导致子视图被裁剪到接收器的边界。如果 设置为 NO,其框架超出可见范围的子视图 接收器未剪辑。默认值为 NO。

导入语句导入 UIKit

可用性 适用于 ios 2.0 及更高版本。


要调整页脚的大小,您必须重写 UITableViewDelegate 方法来设置页脚高度:

(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section 参数 tableView 请求此信息的表视图对象。第一个索引 标识 tableView 部分的数字。返回值 A 非负 指定高度(以磅为单位)的浮点值 部分的页脚。

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/UITableViewDelegate/tableView:heightForFooterInSection:

【讨论】:

剪辑到边界很好,但是我的子视图在父slap中显示为平板。我需要父母的观点来包容孩子。无论如何,显示的高度可能是 10 而不是 70。我该如何解决这个问题?

以上是关于父 UIView 不包含/剪切子视图的主要内容,如果未能解决你的问题,请参考以下文章

UIView clipToBounds 没有停止子视图接收父视图之外的触摸

子视图相对于父 UIView 的起源

如何将触摸事件从 ScrollView 子视图传递到它的父视图

为啥我的 UIView 子视图没有在父视图中呈现? (附代码)

如何在不将其添加到子视图的情况下截取 uiview?

iOS - 界面生成器 - 不继承父视图 alpha 的子视图