我在启动时修改UIView高度时遇到问题。
我必须UIView,我想要一个屏幕尺寸* 70和另一个填补空白。
这就是我所拥有的
@IBOutlet weak var questionFrame: UIView!
@IBOutlet weak var answerFrame: UIView!
let screenSize:CGRect = UIScreen.mainScreen().bounds
和
questionFrame.frame.size.height = screenSize.height * 0.70
answerFrame.frame.size.height = screenSize.height * 0.30
它在运行时对应用程序没有影响。我使用autolayout但我只有边距约束...
我做错了吗?
干得好。这应该工作。
questionFrame.frame = CGRectMake(0 , 0, self.view.frame.width, self.view.frame.height * 0.7)
answerFrame.frame = CGRectMake(0 , self.view.frame.height * 0.7, self.view.frame.width, self.view.frame.height * 0.3)
这可以通过Swift 3.0中的各种方法实现,最新版本为MAY-2019
直接为视图指定高度和宽度值:
userView.frame.size.height = 0
userView.frame.size.width = 10
为帧分配CGRect
userView.frame = CGRect(x:0, y: 0, width:0, height:0)
方法细节:
CGRect(x:X点,y点:Y点,宽度:视图宽度,高度:视图高度)
使用CGRECT的扩展方法
在任何swift文件中添加以下扩展代码,
extension CGRect {
init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) {
self.init(x:x, y:y, width:w, height:h)
}
}
在应用程序的任何位置使用以下代码来设置大小参数
userView.frame = CGRect(1, 1, 20, 45)
Swift 3和Swift 4:
myView.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
嗨创建这个扩展,如果你想。更新2015 Swift 2.0
创建文件Extends.Swift并添加此代码(在您想要更改高度的位置添加导入基础)
/**
Get Set x Position
- parameter x: CGFloat
by DaRk-_-D0G
*/
var x:CGFloat {
get {
return self.frame.origin.x
}
set {
self.frame.origin.x = newValue
}
}
/**
Get Set y Position
- parameter y: CGFloat
by DaRk-_-D0G
*/
var y:CGFloat {
get {
return self.frame.origin.y
}
set {
self.frame.origin.y = newValue
}
}
/**
Get Set Height
- parameter height: CGFloat
by DaRk-_-D0G
*/
var height:CGFloat {
get {
return self.frame.size.height
}
set {
self.frame.size.height = newValue
}
}
/**
Get Set Width
- parameter width: CGFloat
by DaRk-_-D0G
*/
var width:CGFloat {
get {
return self.frame.size.width
}
set {
self.frame.size.width = newValue
}
}
For Use(继承UIView)
inheritsOfUIView.height = 100
button.height = 100
print(view.height)
您可以在Interface Builder中执行此操作:
1)在弹出选择“Equal heights”中,从框架视图(例如,questionFrame)控制拖动到主视图。
2)然后转到框架的尺寸检查器,单击编辑“等高到Superview”约束,将乘数设置为0.7并点击返回。
您会看到约束已从“等高到......”变为“比例高度到......”。
对于进度条类的东西,在Swift 4中
我按照以下步骤操作:
@IBOutlet var progressBar: UIView!
var progressBarWidth: Int = your value
之后增加其宽度值的属性progressBar.frame.size.width = CGFloat(progressBarWidth)
progressBarWidth += your value
以在每次用户触摸按钮时自动增加宽度。分配questionFrame.frame.size.height= screenSize.height * 0.30
不会反映视图中的任何内容。因为它是一个只有get的属性。如果您想更改questionFrame的框架,可以使用以下代码。
questionFrame.frame = CGRect(x: 0, y: 0, width: 0, height: screenSize.height * 0.70)
我知道这个问题已经有了一个解决方案,但我找到了这个问题的替代方案,也许它可以帮到某个人。
我在设置子视图的框架时遇到了问题,因为某些值指的是它在主视图中的位置。因此,如果您不想通过CGRect更改整个帧来更新帧,您只需更改帧的值然后更新它。
// keep reference to you frames
var questionView = questionFrame.frame
var answerView = answerFrame.frame
// update the values of the copy
questionView.size.height = CGFloat(screenSize.height * 0.70)
answerView.size.height = CGFloat(screenSize.height * 0.30)
// set the frames to the new frames
questionFrame.frame = questionView
answerFrame.frame = answerView