问题标签 [layoutsubviews]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1181 浏览

iphone - UIScrollView 在 iOS 4.0 上缩放时不调用 layoutSubviews

我已经阅读了这里提出的许多 UIScrollView 问题,但没有一个回答这个问题。

我有一个 UIScrollView 可以缩放包含其他子视图的视图。当缩放发生时,我需要让视图的子视图移动到某些地方。我可以通过在 UIScrollView 的 layoutSubviews 方法中相应地更改它们的框架来实现这一点。

在 iOS 3.2 及更低版本上,这对于使用 zoomToRect:animated: 方法的手指缩放和实用缩放都非常有效。

在 iOS 4.0 或更高版本上,这仅适用于手指缩放。使用 zoomToRect:animated: 进行实用缩放时,对 layoutSubviews 的调用仅发生一次(在缩放结束时)。我需要在缩放期间多次调用此方法,以便我的子视图可以随着缩放进行平滑的位置变化。

所以总而言之,在 iOS 3.2 上,对 layoutSubviews 的调用会发生多次,而在 iOS 4.0 上,当您调用 zoomToRect:animated: 时,对 layoutSubviews 的调用只会发生一次。有谁知道我的问题的解决方案?

0 投票
1 回答
7353 浏览

objective-c - 当我在文件中使用带有类别的 UItableViewcell 的 layoutSubviews 方法时,有些东西消失了

当我使用带有类别的 UItableViewcell 的 layoutSubviews 方法时,就像下面的代码一样

当我使用下面的代码绘制单元格时,textLabel消失了,任何人都知道为什么会这样~,这是否意味着如果我使用 layoutSubviews,我必须在方法中编写我需要的所有子视图?

0 投票
1 回答
478 浏览

ios - iOS:层(在 CADisplayLink 上更新)添加到视图触发器 [view layoutSubviews] 60x/sec -- 为什么?

我无法弄清楚这一点。

我有一个看法。

它是一个速度计。

我在车速表里放了一根针:

针对象包含一个 CALayer 属性。

needle 负责为每一帧定位自己——它设置自己的显示链接处理程序并在该层上执行转换

现在突然我的视图的 layoutSubviews 方法每一帧都被击中。

我无法理解这种行为。

我可以理解 SUPERview 中的一些变化导致这种方法受到影响。但是 SUBlayer 如何强制执行此操作?

一个子层肯定应该受其父层的摆布吗?

我试过设置

这显然没有效果

我要找的房产是

到底是怎么回事?

0 投票
1 回答
452 浏览

iphone - 子视图布局的自定义视图中的自定义方法,或使用 layoutSubviews/layoutIfNeeded

我有一个在 UIViewController 中使用的自定义 UIView。自定义视图需要一些自定义/程序布局。我目前正在做的是,在控制器“viewDidAppear”方法中,我正在调用我已经放置的自定义视图方法,称为“layoutThisView”。这似乎工作正常。

问题 - 我应该/可以使用 UIView layoutSubviews/layoutIfNeeded 方法代替这种方法吗?这会帮助/成为更好的方法吗?

0 投票
2 回答
928 浏览

iphone - 可以让superView拦截layoutSubviews:来自子视图吗?

为了实现灵活的布局,我想创建一个 UIView 子类,layoutSubviews:它会自动覆盖其所有子视图的布局,并且每次调整其子视图的大小时都会继续这样做。

但是,我能想到的让超级视图知道它应该调用layoutSubviews:的唯一方法是在其每个子视图中覆盖该方法,这是我想尝试避免的(我希望人们能够添加任意 UIView到superview并处理这个问题)。

有没有办法让超级视图layoutSubviews:在子视图更改其大小时调用,而无需向相关子视图添加任何代码?

0 投票
4 回答
61124 浏览

ios - 如何强制 UIView 的 layoutSubviews?

我有一个自定义 UIView,它有一个专门的、手动设置的纵向和横向框架,因为 autoresizingMasks 在我的情况下不起作用。

我将此框架设置为:

它按预期工作。

我现在的问题是,我的 UIView 还具有子视图,这些子视图也有专门的纵向/横向位置。

我将这些子视图定位在:

如果我现在让我的 viewController 保持纵向,在另一个 viewController 上旋转到横向,然后返回到这个 viewController,我看到我的视图已正确调整大小,但我的视图的子视图(位于 layoutSubviews 中)尚未重新定位,但是在视图已经出现后以动画方式调整大小。

我在 viewDidAppear 中什么都不做,我已经尝试过调用

也:

viewWillAppear,但它似乎并没有改变任何东西。

任何想法我做错了什么?

0 投票
2 回答
1968 浏览

ios - iOS 5 中的 UIScrollView layoutSubviews 行为变化?

我正在开发一个组件,它是 UIView 的子类并包含 UIScrollView。滚动时,我注意到不同的行为取决于我构建的 SDK。在 iOS 4 上,layoutSubviews 消息在滚动视图的超级视图(这是我的组件)上发送,但在 iOS 5 上,消息似乎不再发送......

在查看了 iOS 5 发行说明和变更日志后,我没有发现任何关于此类变更的提及。我错过了什么吗?

0 投票
1 回答
730 浏览

ios - iPhone - 更新子视图时调用 layoutSubviews

我有一个类似网格布局的自定义视图。当我触摸每个子视图时,我想为它们设置动画。超级视图覆盖layoutSubviews以创建子视图网格。

问题是每当我更改动画子视图的框架时,都会调用父视图的 layoutSubviews 方法覆盖框架并且不会发生动画。

为什么在这种情况下会调用 layoutSubviews,我该如何防止它?

还有其他类似的问题,但没有一个得到正确的回答。

谢谢!

0 投票
1 回答
2736 浏览

ios - layoutSubviews 内的动画?

我有一个视图(LSTabBarView),它支持使用以下方法插入/删除新元素:

LSTabItem 是代表我的模型类的对象。每次使用 insertItem:atIndex:animated 添加新元素时:使用此模型对象内部的信息创建一个新的子视图(LSTabControl),然后添加到主视图,最后调用 layoutSubviews 重新计算每个子视图的框架子视图。

我刚刚实现了这些操作,但是“动画”参数暂时没有使用,我想知道当动画是 YES 时我应该把代码放在哪里来处理动画。

这些是相关的方法:

layoutSubviews 所做的基本上是将每个子视图置于线性水平序列中,一个接一个地在每个子视图之间应用填充。每个子视图可以有不同的宽度或高度(它们不是固定大小)。当添加一个新元素并将动画设置为 YES(假设在 index=2 处)时,我希望从 index+1 到 numberOfElements 的每个子视图都向右移动,然后新的子视图出现在可用的孔中。

我显然希望 LSTabBarView 是可扩展的,因此在这些方法的基本实现中,我无法假设子视图将如何按子类排列(例如,子类可能会覆盖 layoutSubviews 并决定将元素布局为垂直布局而不是水平布局因此决定在添加新元素时将每个子视图向下移动而不是向右移动......)

我不想知道如何执行动画(我已经知道怎么做)但是考虑到我上面描述的要求,如何为新子视图的外观设置动画的正确方法是什么。

我应该考虑在 layoutSubviews 内执行所有动画,还是将动画代码放在 insertItem/removeItem 内,让 layoutSubviews 只计算子视图布局?

谢谢

0 投票
1 回答
2428 浏览

ios - UIScrollView 内容大小在不应该时裁剪子视图

我有一个 UIScrollView 包含几个动态调整大小的子视图。我可以很好地调整子视图的大小和布局,但是当我设置滚动视图本身的内容大小时,底部的子视图会被剪裁。为什么滚动视图的内容大小高度应该大于它包含的视图高度的总和是否有某种原因?

这是我更详细的情况:我有一个包含 UIScrollView 的超级视图,其中包含多个子视图。在超级视图的 layoutSubviews 方法中,我计算了每个子视图所需的大小,然后设置框架,使子视图垂直平铺在屏幕下方,并在它们之间留出一点空间。完成后,我将 UIScrollView 的内容大小的高度设置为最后一个子视图的结尾(origin.y + size.height)。理论上,这意味着滚动视图的内容区域的底部应该与最后一个子视图的底部完全对齐。

但事实并非如此。相反,最后一个子视图的一大块被剪裁了。它仍然存在 - 如果我向下滚动,我可以在“反弹”期间看到剩余部分。在横向模式下问题更严重 - 底部子视图的大部分根本不可见。

子视图都被正确排列和定位。问题是 UIScrollView 的 contentSize 似乎需要明显大于子视图的高度总和(加上它们之间的空间)。这对我来说没有任何意义。此外,大小“关闭”的数量会有所不同 - 我多次使用不同的子视图重复使用此视图,并且它们都关闭了不同的数量。因此,简单地向内容视图高度添加一个常量是没有帮助的。

是什么导致内容大小(或我的高度计算)无法正常运行?

代码: