相关疑难解决方法(0)

尺寸变化时,何处更新Autolayout约束?

我有几个UIView沿着包含的底部布置UIView.我希望这些视图始终具有相等的宽度,并始终拉伸以共同填充包含视图的宽度(如底部的表情符号键盘按钮).我接近这个的方法是为其中一个视图设置相等的宽度,然后只更新该视图的宽度约束,superviewWidth / numberOfViews这将导致所有其他视图更新为相同的值.

我想知道更改约束常量的代码需要去哪里.需要在键盘首次出现在屏幕上之前进行设置,并在旋转设备时进行更新.

我第一次尝试解决方案是将其放入updateViewConstraints并计算宽度containerView.frame.size.width.但是这个方法在加载时调用两次,第一次正确计算值,但第二次出于某种原因,containerView宽度为0.0.另一个问题是,旋转时,containerView宽度不是旋转后的值,而是旋转前的当前值.但是我不想等到旋转完成后更新约束,因为按钮将是原始大小然后更改将对用户产生不利影响.

我的问题是:放置此代码的最合适位置在哪里?有没有更好的方法来计算宽度?我可以保证它的宽度始终与屏幕宽度完全相同.我在Xcode 6中使用Size Classes,因此willRotateToInterfaceOrientation不推荐使用类似的方法.

rotation uiview ios autolayout swift

8
推荐指数
2
解决办法
9320
查看次数

UITraitCollection澄清

我试图弄清楚如何以UITraitCollection编程方式使用,但我发现很难理解它.我正在开发iOS 8中的iPad视网膜.

println(self.traitCollection) 返回以下输出:

 <UITraitCollection: 0x10df4c7f0; _UITraitNameUserInterfaceIdiom = Pad,
 _UITraitNameDisplayScale = 2.000000, _UITraitNameHorizontalSizeClass = Regular, 
 _UITraitNameVerticalSizeClass = Regular, _UITraitNameTouchLevel = 0, 
 _UITraitNameInteractionModel = 1>
Run Code Online (Sandbox Code Playgroud)

这很直截了当.但是当我旋转屏幕时,我得到完全相同的输出.即,相同的垂直尺寸类和相同的水平尺寸类.

所以我的问题是,我是否需要为每个设备方向指定我想要的大小类(据我所知,大小类是只读属性!)或者我错过了一些明显的东西?在WWDC 2014视频网站上的"Cocoa-Touch中的新内容"演讲中给出的示例中,他使用iPhone作为示例,其针对每个设备方向具有不同的垂直/水平尺寸类别.

你会怎么做?

ios swift size-classes

5
推荐指数
1
解决办法
5778
查看次数

在设备轮换时保持autolayout约束活动状态

我注意到,当我以编程方式更新自动布局约束时,在旋转屏幕时会恢复所有更改.

重现问题:

  • 带有UIView的基本Storyboard界面和2个约束:

    1. width等于superview.width(乘数1)有效
    2. 宽度等于superview.width(乘数1/2)禁用
  • 使用IBOutlet创建并链接这两个约束

  • 以编程方式禁用第一个约束并启用第二个约束.
  • 旋转设备,第一个约束处于活动状态,第二个约束处于禁用状态.

对我来说似乎是一个错误.

你怎么看 ?

截图:

故事板: 在此输入图像描述

约束#1:

在此输入图像描述

约束#2:

在此输入图像描述

ios autolayout

3
推荐指数
1
解决办法
1676
查看次数

标签 统计

ios ×3

autolayout ×2

swift ×2

rotation ×1

size-classes ×1

uiview ×1