如何更改UIView尺寸?

时间:2014-11-03 01:33:17

标签: uiview swift height xcode6

我在启动时修改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但我只有边距约束......

我做错了吗?

8 个答案:

答案 0 :(得分:47)

你走了。这应该有效。

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)

答案 1 :(得分:41)

这可以通过 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)

答案 2 :(得分:24)

Swift 3和Swift 4:

myView.frame = CGRect(x: 0, y: 0, width: 0, height: 0)

答案 3 :(得分:19)

如果你愿意,你可以创建这个扩展。 更新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
    }
}

使用(继承UIView)

inheritsOfUIView.height = 100
button.height = 100
print(view.height)

答案 4 :(得分:1)

您可以在Interface Builder中执行此操作:

1)通过控制 - 从框架视图(例如,questionFrame)拖动到主视图,在弹出选择“Equal heights”中。

2)然后转到框架的尺寸检查器,单击编辑“等高到Superview”约束,将乘数设置为0.7并点击返回。

您会看到约束已从“等高到......”变为“比例高度为......”。

答案 5 :(得分:1)

对于进度条之类的东西,在Swift 4中

我按照以下步骤操作:

  1. 我创建了一个UIView出口:@IBOutlet var progressBar: UIView!
  2. 然后是一个属性,可在用户操作var progressBarWidth: Int = your value
  3. 后增加其宽度值
  4. 然后增加/减少进度progressBar.frame.size.width = CGFloat(progressBarWidth)
  5. 最后,在IBACtion方法中,我添加了progressBarWidth += your value用于在用户每次触摸按钮时自动增加宽度。

答案 6 :(得分:1)

分配questionFrame.frame.size.height= screenSize.height * 0.30将不会在视图中反映任何内容。因为它是一个只读属性。如果要更改问题框架,可以使用以下代码。

questionFrame.frame = CGRect(x: 0, y: 0, width: 0, height: screenSize.height * 0.70)

答案 7 :(得分:0)

我知道这个问题已经有解决方案,但是我找到了解决该问题的替代方法,也许可以对某人有所帮助。

我在设置子视图的框架时遇到了麻烦,因为某些值引用了它在主视图中的位置。因此,如果您不想通过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