Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 强制进行布局,以保证赢得的宽度';布局完成后,请不要更改_Ios_Swift_Ios App Extension_Ios8 Today Widget - Fatal编程技术网

Ios 强制进行布局,以保证赢得的宽度';布局完成后,请不要更改

Ios 强制进行布局,以保证赢得的宽度';布局完成后,请不要更改,ios,swift,ios-app-extension,ios8-today-widget,Ios,Swift,Ios App Extension,Ios8 Today Widget,我正在以编程方式在viewdiload中创建UICollectionView,然后对其设置自动布局约束。我需要确切地知道集合视图显示给用户后的宽度,但我需要viewDidLoad中的信息(不能使用willLayoutSubviews等) 如何强制布局,以便我可以保证宽度将更新为viewDidLoad中的真实宽度 //viewDidLoad: let collectionView = //... self.view.addSubview(collectionView) //add constrai

我正在以编程方式在
viewdiload
中创建
UICollectionView
,然后对其设置自动布局约束。我需要确切地知道集合视图显示给用户后的宽度,但我需要
viewDidLoad
中的信息(不能使用
willLayoutSubviews
等)

如何强制布局,以便我可以保证宽度将更新为
viewDidLoad
中的真实宽度

//viewDidLoad:
let collectionView = //...
self.view.addSubview(collectionView)
//add constraints here
let wid = collectionView.frame.size.width //0

//viewDidAppear:
let wid = collectionView.frame.size.width //603
我尝试调用self.view.layoutSubviews(),但这并没有完全解决问题。它将wid从0改为720,但这是不正确的


我在Today扩展中尝试此操作,它可能不同于传统的视图控制器。

使用
视图将出现:
。视图将加载正确的帧,然后您可以在视图实际显示之前创建集合视图。

我不能使用
将显示
,因为这会不希望地影响扩展的行为。我根据宽度所做的更改必须在
视图出现之前设置,并且只设置一次。是否将宽度设置为特定值?或者,是否根据周围视图设置自动布局约束?在使用集合视图宽度执行计算后,我正在更改自动布局约束常量。在
视图中执行此操作的不良行为将出现
,即扩展在加载时高度会增加,加载完成后会收缩。我需要提前设置它,使其始终保持相同的高度。集合视图的宽度是动态的,无论当前视图的宽度对于它运行的设备是什么(它有superview的前导和尾随。同样在iPad上,
视图中报告的宽度将出现
不是
视图中报告的宽度出现
——它关闭了很多。