问题标签 [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 回答
704 浏览

ios5 - 为什么 UIScrollView 的滚动会在 iOS 4.3 中触发 layoutSubViews 方法,而在 5.0 及以上版本中却没有?

我已经自定义 UIView 来创建自定义 UI 组件。

视图的层次结构是这样的。

----自定义UIView

----------------UIScrollView

----------------------------- ScrollView 中的子视图

当滚动视图滚动时,layoutSubviews 方法在 iOS 版本 4.3 中被调用。但是对于 4.3 (5.0 , 6.0) 以上的版本,不会调用此事件处理程序。

在我的用例中,我不希望 layoutsubviews 被调用。

如何确保在滚动时我有一个不会触发 layoutsubviews 方法的滚动视图?

0 投票
1 回答
261 浏览

uitableview - 我可以通过减少调用 [CALayer LayoutSubviews] 来使我的 tableview 移动得更流畅,以及如何?

根据时间概况,我发现我的应用由于调用了[UITable layoutSubviews],在[CALayer layoutSublayers]上浪费了太多时间。所以生成tableview的动作并不流畅,每当第一次点击按钮时,我都会等待近2秒才能看到下一个视图。下一个视图的表格视图中的每个单元格都有 8 个子视图,导致 layoutSubviews 占用了太多时间。因此我想知道如何优化这个进度,我不想在它的drawrect中构建一个包含这8个子视图的自定义单元格:以避免layoutSubviews。谁能帮我?

0 投票
1 回答
4316 浏览

ios - 使用自动布局调整子视图的大小

如果我有一个带有 XIB 的 viewController,则启用自动布局并且主视图(我的意思是 self.view)中有一个子视图,其宽度和高度与父视图相同。

如果我将此控制器放在另一个控制器中(使用 addchildController 包含模式),则调整此控制器的容器大小,内部控制器的 self.view 会发生变化,但子视图/子视图不会调整大小!我该怎么办?

使用 autoresizingmask 我知道该怎么做,但我需要使用自动布局!

谢谢您的帮助!

0 投票
1 回答
1710 浏览

ios - UITableView“滑动删除”按钮框架问题

UITableViewCell在我的应用程序中使用自定义,我正在尝试调整“滑动删除”按钮的框架。

这就是我正在做的事情:

它出现在新的位置,这很棒。但是,当我单击按钮使其消失时,按钮似乎突然向左移动了大约 10 个点,然后被移除。

为什么会发生这种情况,我该如何解决?

0 投票
1 回答
5102 浏览

ios - layoutSubviews 旋转时调用了两次

当我的主视图旋转时,我想重新排列子视图,所以在我的 ViewController 中,我覆盖

并在那里设置子视图的框架。这一切都很好,但是在子视图中我也覆盖了

所以他们正确地布局自己。但问题是这现在被调用了两次——大概一次是当我在 willAnimateRotationToInterfaceOrientation 中设置 Frame 时,一次是因为旋转。(如果我不设置 Frame 它会被调用一次。)

当然,布局框架是 ViewController 的责任,所以这似乎是一个设计缺陷——解决方案是什么,所以 layoutSubviews 只被调用一次?

0 投票
2 回答
515 浏览

ios - 我们应该在 iOS 的初始化程序或 layoutsubviews 方法中添加 UITableView 吗?

我正在为我的应用程序设计一个自定义 UIView。

UIView 将由以下组件组成:

  1. UI搜索栏
  2. UITableView

我的初始化程序如下:

我打算在 layoutsubviews 方法中设置 _searchBar 和 _tableView 的框架。

但我认为我将 _tableView 添加到 super 的方式是错误的。因为在 _tableView 添加到子视图的那一刻,_tableView 的数据源方法就会被触发。这甚至发生在自定义类本身的创建之前。

这是一个正确的设计吗?

我可以按以下方式在 layoutSubviews 中单独添加 _tableView 吗?

0 投票
1 回答
248 浏览

ios - 根据设备方向将子视图从 2 行重新排列为 1

伙计们,

我最初的目标是使用 iOS6.1 的 iPhone,但也欢迎使用 iOS5.1 在 iPhone 上完美运行的提示和代码。

我有一个自定义 UITableViewCell 有 7 个不同的标签作为子视图:

当我懒惰地实例化标签时,我认为起始方向是纵向,并且标签排列在两条不同的线上:

我想问一下实现这一目标的最佳方法是什么:

“如果方向是纵向,则如上所述将标签排列在 2 条不同的行上,如果方向是横向,则将所有标签排列在一行上。如果用户改变方向,重新排列应该是自动的。

横向模式下的重新排列应使所有标签与 y 值 30 对齐(而不是第一行为 30,第二行为 60)。标签 4、5、6、7 的 x 值也应该改变,因为它们不会被放置在标签 1、2、3 的下方,而是被放置在标签 3 的右侧。”</p>

顺便说一句,我发现有时在真正的 iPhone 上启动应用程序时,桌面上会出现“纵向”,在 iOS 5.1 和 iOS 6.1 中,方向都被错误地报告为“横向”。我发现这个是因为我开始使用 layoutSubviews:因为我认为这是重新排列视图的最佳位置,根据设备的方向为每个视图创建一个新框架。这是自动布局的最佳案例吗?该视图是以编程方式创建的,并且将以编程方式创建。

谢谢

尼古拉

0 投票
1 回答
1393 浏览

objective-c - 有什么方法可以操纵父视图控制器,以便子视图位于 UIPageControl 下方?

我正在通过使用 UIPageViewController 在应用程序中实现水平滚动,我将导航属性设置为“水平”,将过渡样式设置为“滚动”。一切正常,我可以添加一些正确呈现的子视图。我还想通过使用这两种方法来利用 UIPageViewController 具有的内置 UIPageControl:

这实际上显示了我正在寻找的内容:指示显示哪个子视图的点。但是,正如您在图像中看到的那样,UIPageControl 设置在父视图控制器(UIPageViewController)的底部。你可以想象这不是我展示我的 UIPageControl 的方式。有什么方法可以操纵父视图控制器,以便子视图位于 UIPageControl 下方?或者有没有其他好的做法来实现这一点?我知道我可以通过使用 scrollView 而不是 UIPageViewController 来实现水平滚动,但这对我来说似乎更有效率。

http://i48.tinypic.com/2hd03ev.png

为了清楚起见:灰色部分是我的子视图,红色部分是我正在使用的底层 UIPageViewController。

提前感谢您的任何回答!

0 投票
0 回答
2004 浏览

ios - iOS 推荐的纵向和横向界面处理方式

我正在开发一个 iPad 应用程序,并希望同时支持纵向和横向。

目前,我看到了三种处理方向的方法:

1) Apple 建议使用两个视图控制器 ( http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html )

2) 我的 iPhone Dev 入门书使用带有多个 UIView 的单个 xib 文件(一个用于纵向,一个用于横向),在 willAnimateRotationToInterfaceOrientation() 方法中交换视图。

3)其他人说“正确”的方法是使用 layoutSubviews 和自动调整掩码。

以前,当我构建一个应用程序时,我会纯粹用代码编写整个应用程序,包括界面设置和布局。结果是我最终得到了大量且非常痛苦的界面代码调整。

现在,在用纯代码编写了许多应用程序之后,我有点理解为什么会有 Interface Builder - 为了帮助管理界面等等,理想情况下,视图控制器应该只用于管理数据并将其发送到视图,而不是管理如何意见应该看。

使用 Interface Builder,拥有两个单独的自定义 UIView 是有意义的,一个用于纵向,一个用于横向,但我被告知 layoutSubview 是更好的选择。

但是如果我要使用 layoutSubview,那意味着我必须回到使用代码来编写和管理我的界面,这对我来说似乎不合适。

使用 layoutSubviews() 真的可行吗?

我真的看不出它比其他方法有什么好处。有人说 layoutSubviews 允许你动画到另一个方向的过渡。

当设备旋转时,我的两个界面不是简单的调整大小按钮或文本宽度。我在文本字段旁边有相邻的滑块,当旋转到横向时应该垂直堆叠,而其他滑块需要移动到屏幕的另一侧等。

编辑

可能是重复的问题:

处理 iPhone 方向横向/纵向

iPad/iPhone 多方向最佳实践?

如果需要,版主可以关闭。

0 投票
1 回答
1044 浏览

ios - layoutSubview 重置UILabel的属性

我有一个带有 UIScrollView 的 ViewController。在这个 VC 上,我以编程方式调整滚动视图内的 UILabel 的框架。这是在 viewDidLoad 上完成的。这个 UILabel 来自 VC 的 xib 文件,它不是以编程方式创建的,只是它的框架发生了变化。

当我从这个 VC 转换到另一个,然后返回时,UILabel 的帧被重置为 XIB 的状态。但是它的文本没有重置,它保持与我之前设置的文本相同。

我的调查告诉我这发生在 layoutSubviews 上,因为 UILabel 的属性在 willLayoutSubviews 上是正确的,然后在移回 VC 时在 didLayoutSubviews 上重置。

这是预期的行为吗?标签的文本仍然存在但框架被重置是否有原因?这是因为 UIScrollView 在滚动时会在其父视图上调用 layoutSubviews 吗?

谢谢