问题标签 [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.
ios - 约束和自动布局背后的 IOS 算法
我正在尝试对 IOS 中的 layoutSubviews 函数进行逆向工程,它计算自动大小和约束。通常,如果我们按顺序创建约束:A 依赖(约束)B,B 依赖 C,并且 C 以固定帧初始化,则系统需要足够智能才能按顺序实现计算:C -> B -> A 避免不必要的循环。
我的问题是:IOS(或算法是什么)如何遍历 NSLayoutContraint 列表并以这种顺序计算框架?
ios - 停止 UITableView 在方向更改时重新加载数据
当设备的方向发生变化时我的uitableview
调用reloaddata
(这是有道理的,因为显示的单元格的数量发生了变化,据我从文档中可以理解,在布局子视图中调用),但这对我来说是有问题的,因为我正在执行下载在后台,我不希望某些文件突然出现。有没有办法停止默认行为并让我在需要时手动重新加载?
编辑:我会尝试更好地解释。在我的 tableview 顶部,我有一个名为“sync”的按钮,它从服务器启动一个同步请求,这个同步请求首先得到一个 JSON 对象,它包含我想在 tableview 中显示的信息,但是每个uitableview
items 代表我从 Internet 下载的文件。
下载文件时,我在屏幕上有一个活动指示器,只有当文件完成下载时,我才想重新加载表格。问题是,当用户改变方向时会UITableview
自动调用reloaddata
,因此在下载的文件完成下载之前,单元格会填充来自 json 的信息。
代码:
ios - iOS:确定所有孩子何时调用 layoutSubviews
似乎在视图上viewDidLayoutSubviews
调用之后立即layoutSubviews
调用,在该视图的子视图上调用之前layoutSubviews
。有什么方法可以知道何时layoutSubviews
调用了视图及其所有也需要更新其布局的子视图?
ios - 为什么 UIViewController 几乎总是需要 layoutSubViews?
在 iOS7 之前,我为 UIView 的框架定义的任何 CGRect 都可以正常工作。
例如:
完美地在屏幕左上角留下了 20 x 20 的边距。
有趣的是,如果我添加另一个 UIView:
nextView 出现在 imageView 附近,因此它以某种方式接受第二个视图的 X 参数,但它也不接受该视图的 Y 坐标。
现在,我必须使用viewWillLayoutSubviews
来安排所有这些坐标。否则,例如,frame forimageView
会0,0,80,80
自动变为。(它捕捉到左上角)
我没有使用任何笔尖,我什至还尝试UIViewController
使用自定义initWithFrame
方法进行创建以设置CGRect
之前loadView
或viewDidLoad
但没关系。
是否有自动覆盖视图的 x,y 的东西?像自动布局系统等?我不想使用viewWillLayoutSubviews
方法重新排列所有这些坐标。
这里发生了什么?
更新 1
我在 initWithFrame 和 viewDidLoad 中尝试了类似的代码。结果是一样的。
更新 2
我在问题中错误地写了“layoutSubviews”而不是“viewWillLayoutSubviews”,所以我修复了它:我不是在创建自定义 UIView 而是 UIViewController,所以在问题中它必须是“viewWillLayoutSubviews”。
ios - 首次出现时无法在 UITableViewCell 中更改 UILabel 的框架(使用自动布局)
我的内部有一个原型单元格,UITableView
其中包含一个UILabel
. 我想根据标签中文本的大小动态更改标签(和单元格)的大小。
我这样创建原型单元cellForRowAtIndexPath
:
然后我ProgramDetailCell
有以下实现:
第一次显示单元格时,layoutSubviews
会调用它,但descriptionLabel
不会调整其大小。但是,如果我向下滚动表格并再次备份,则会出现“重用”单元格,并且标签的大小已正确调整!
为什么第一次显示单元格时它不起作用 - 我需要做些什么来修复它。
提前致谢!
ios - 如何布局具有不同高度的自定义 UITableViewCell
我有一个 UITableViewCell 子类,它有一个图像、标题和描述。我应该根据描述内容长度调整单元格高度的大小,即如果它跨越超过 5 行,我应该扩展它(+其他子视图,如图像等)直到它持续。
下一个细胞应该在那之后才开始。
我有我的 UITableViewCell 子类从 xib 实例化,它具有固定的行高 = 160。
我知道这是非常标准的要求,但我找不到任何指导方针。
我已经像这样扩展了 layoutSubViews:
它几乎告诉我们,如果描述高于图像,我们必须调整图像的大小以及单元格高度以适应描述。
但是,当我通过这样做调用此代码时:
看来,虽然单元格框架因layoutSubViews
调用而改变,但其他单元格不尊重它。也就是说,如果前一个单元格不会自行调整大小,它们会出现在相同的位置。
两个问题:
- 如何实现我想要的?
- 我通过调用 inside 做得对
setNeedsLayout
吗cellForRowAtIndexPath
?
PS:我知道heightForRowAtIndexPath
改变单元格高度的关键,但我觉得我做的数据解析(此处未显示)cellForRowAtIndexPath
只是为了计算高度而过度杀伤。我需要一些可以直接告诉UITableViewCell
根据内容需要调整自身大小的东西。
ios - 在自定义 UITableViewCell 中实现 layoutSubviews 时,单元格的边框消失
他们说一张图片值千言万语所以......当我不layoutSubviews
自定义实现时,UITableViewCell
我明白了
layoutSubviews
在自定义实施后,UITableViewCell
我得到了这个
我怎样才能得到实施的第一张照片layoutSubviews
?
ios - iOS 自定义 UIView 设计:init vs layoutSubviews
我有许多自定义 UIView。
我经常发现自己在自定义视图的初始化中初始化属性,但我也在那里设置了框架。
我通常将 layoutSubviews 留空。如果我不希望我的视图边界发生变化,是否可以在 init 本身中设置我的各种子视图框架,还是应该将其移动到 layoutSubviews?
我想提一下,我这样做的原因之一是因为我经常发现自己必须根据子视图的布局方式来计算自定义视图的框架(大小)。
我通常在设置完所有子视图框架大小后调整自定义视图框架的大小。
ios - willRotateToInterfaceOrientation + setframe 无法布局
我正在尝试在旋转之前(没有动画但使用当时我想获得的 CGRect)和旋转时(使用新的 CGRect)更改视图的形状。
基本上,即使我尝试使用“self.view layoutIfNeeded”、“self.view setNeedLayout”、“self.view layoutSubviews”等强制它,iOS 也不会在“willRotateToOrientation”方法中布局任何东西......)
当我使用自动布局时,我尝试不使用 SetFrame 而是使用约束(根本没有改变任何东西)
uilabel - Xcode6、iOS8 和 (void)layoutSubviews
我有自定义 UILabel 可以在 iOS6 和 iOS7 上正常工作。但是在 iOS8 上,这个标签的 (void)layoutSubviews 方法永远不会被调用。我用 initWithFrame 创建了这个标签,所以应该调用这个方法 - 它在另一个 iOS 版本上被调用。iOS8 中的自动布局系统会发生什么?