以编程方式分配的 UIView 未在我给出的 x 和 y 处分配。超越这一点。

Posted

技术标签:

【中文标题】以编程方式分配的 UIView 未在我给出的 x 和 y 处分配。超越这一点。【英文标题】:UIView allocated programmatically not allocated at the x and y i have given. Going beyond that. 【发布时间】:2013-06-10 05:35:45 【问题描述】:

大家好,我以编程方式分配了 UIView,比如,

detailView = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
         detailView.alpha = 0.95;
         detailView.layer.cornerRadius = 10;
         detailView.layer.borderColor = [UIColor blackColor].CGColor;
         detailView.layer.borderWidth = 1;
         [distributorView addSubview:detailView];

然后我以编程方式在此视图上添加了一些标签,例如,

arnNoDtlViewLbl   = [[UILabel alloc] initWithFrame:CGRectMake(55,110,190,25)];
         arnNoDtlViewLbl.text      = [NSString stringWithFormat:@"%@",[brdArnNoAry objectAtIndex:rowOfTheCell]];
         [arnNoDtlViewLbl setFont:[UIFont fontWithName:@"Verdana" size:13]];
         arnNoDtlViewLbl.textColor = [UIColor darkGrayColor];
         arnNoDtlViewLbl.numberOfLines=1;
         [arnNoDtlViewLbl setBackgroundColor:[UIColor clearColor]];
         [detailView addSubview:arnNoDtlViewLbl];

有这么六个标签,还有一个关闭按钮可以关闭视图, 如果我将角 redius 设置为该视图会发生什么,该视图似乎在正确的位置,就像我给出的坐标一样,但是如果我删除角 redius,视图及其内容意味着标签和所有内容,将超出坐标我给了他们,,,

这是视图,它的样子,整个代码是here,

【问题讨论】:

detailView.layer.masksToBounds = YES; arnNoDtlViewLbl 的来源为 55,110。您是否了解该框架原点在其父视图坐标系中说明?换句话说,图像“ARN-1221”中显示的第一个标签正是我期望的位置,在 200 px 父视图下大约 1/2 (110 px)。 我的第一个问题是什么是distributorView?将 subView.frame.origin.x 的所有子视图设置为 5 而不是 55。 请将您的 arnNoDtlViewLbl 框架更改为 arnNoDtlViewLbl = [[UILabel alloc] initWithFrame:CGRectMake(10,10,190,25)];然后尝试 【参考方案1】:

当你添加一个子视图时,它会参考它的父视图坐标。

如果我有view A -> view B - > View c

视图 B 的框架起点 (0,0) 在视图 A 的左上角 视图 C 的框架原点 (0,0) 在视图 B 的左上角,依此类推 开

所以

         arnNoDtlViewLbl   = [[UILabel alloc] initWithFrame:CGRectMake(0,0,190,25)];
         arnNoDtlViewLbl.text      = [NSString stringWithFormat:@"%@",[brdArnNoAry objectAtIndex:rowOfTheCell]];
         [arnNoDtlViewLbl setFont:[UIFont fontWithName:@"Verdana" size:13]];
         arnNoDtlViewLbl.textColor = [UIColor darkGrayColor];
         arnNoDtlViewLbl.numberOfLines=1;
         [arnNoDtlViewLbl setBackgroundColor:[UIColor clearColor]];
         [detailView addSubview:arnNoDtlViewLbl];

将为您完成这项工作

【讨论】:

感谢您的协调,先生,在 ishhhh 对问题的评论的帮助下,我已经纠正了我的错误.. 和您说的一样。【参考方案2】:

您可能必须阅读文档或 FrameBound's 之间的区别并相应地使用它们。

【讨论】:

以上是关于以编程方式分配的 UIView 未在我给出的 x 和 y 处分配。超越这一点。的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的 UILabel 未在旋转时调整大小

UIVisualEffect 未在 UIView 上显示

Swift - 以编程方式在 UIView 中定位项目

以编程方式创建 UIView 在 Xcode 11.1 中不起作用

如何以编程方式删除表格视图单元格中的 UIView?

以编程方式设置 UICollectionViewController 单元格内的 UIView 子视图的高度?