【问题标题】:UIView AutoresizingUIView 自动调整大小
【发布时间】:2013-07-16 06:00:25
【问题描述】:

我可以轻松地花费数小时(如果不是数天)来解决这个问题(我已经花了好几个小时了!!!)

我有一个 UIView,它包含子视图(见附图),并且在它被添加为任何东西之前就已经构建好了。

在某个时间点,我将它作为子视图视图添加到 UITableViewCell。我打电话给

[tableViewCell.contentView addSubview:mySubview]
    //....
[mySubview setBounds:tableViewCell.contentView.bounds]

当我初始化我的子视图时,我有:

[self setAutoresizesSubviews:YES]

从我的图形中,您可以看到我假设只有宽度发生变化。我该怎么做才能让 mySubview 的右侧子视图扩展到全宽,同时保持其原始原点?

我的想法很容易接近这一切都是错误的,我欢迎任何建议!

编辑 非常感谢您的帮助,Khanh Nguyen

所以,正如我之前所说,当我初始化 v1 时,(并且,根据定义,v2)我不知道 v1 的尺寸。

当我知道我想要放置 v1 的界限时,我假设我可以做这样的事情:

[v1 setBounds:(some CGRECT)];
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

或者 C 我只是在实例化 v2 后立即在 v2 上设置 autoresizingMask(当我仍然不知道 v1 的尺寸时)?

【问题讨论】:

  • 一些问题: 1. 你在使用自动布局吗? 2.你确定你没有使用自动布局吗?
  • 感谢@Andrea 的回复。我可以告诉你的是,我没有使用 xib 文件的故事板(一切都以编程方式完成),并且我没有在代码中的任何地方声明使用(或不使用)自动布局。
  • 您是否设置了托管视图 (mySubview) 的 autoresingmask?
  • @Andrea,不,你在我原来的帖子中看到的关于自动调整大小的内容就是我所设置的。
  • T 在添加 mySubviews 之前尝试添加这一行 mySubview.autoresingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight

标签: ios uiview autoresize autoresizingmask


【解决方案1】:

如果您有一个视图v1,它的子视图v2 并且您希望v2 具有固定的左边缘,而当v1 调整大小时它的宽度会发生变化(即v1 的右边缘之间的距离和v2 的右边缘是恒定的),使用这个:

v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

对于斯威夫特:

v2.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleBottomMargin]

默认情况下,autoresizesSubviews 为“是”。你不需要设置它。

编辑

每个视图都有尺寸,即使您不知道(如果您想知道,只需发送NSLog)。如果视图刚刚被初始化,它的尺寸可能是 (0, 0)。 autoresizesSubviews 即使在这种情况下也可以使用,只要您知道子视图和父视图之间需要多少间距即可。

例如,您希望v2 与v1 的左边距为10px,右边距为20px,如下所示

// v1 has been initialized, and its dimensions are unknown (to you)
// It's probably (0, 0), but that doesn't matter
// 30px = 10px + 20px
v2.frame = CGRectMake(10, 0, v1.bounds.size.width - 30, 100);
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

注意第三行,如果v1 最初的大小为零,则v2.frame 将设置为一些负数,但是当v1 的框架设置为适当的大小时(由您或UITableViewCell ),v2 将相应地调整大小(由于自动调整大小约束),并成为您想要实现的目标。

【讨论】:

  • 这可能会有所帮助,但还不确定。我正在做的是在 v1 的某些未知上下文中 subView v2 上的 initWithFrame。当我终于出现并在 v1 上执行 setBounds 时,v2 是否应该自动变宽?请记住,在定义 super 的框架之前,我做了一个 initWithFrame:CGRectMake(110,10,super.frame.size.width,super.frame.size.height)。
  • 您需要知道调用此行时v1 和v2 的确切大小。在该行之后,对v1 宽度的更改将传播到v2。
猜你喜欢
  • 1970-01-01
  • 2011-07-14
  • 2011-01-08
  • 2013-01-22
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多