【问题标题】:How do I change UIView Size?如何更改 UIView 大小?
【发布时间】:2014-12-29 15:44:49
【问题描述】:

我无法在启动时修改 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

它在运行时对应用没有影响。 我使用自动布局,但我只有边距限制...

我做错了吗?

【问题讨论】:

  • questionFrame.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height * 0.7) answerFrame.frame = (0 , self.view.frame.height * 0.7, self.view.frame.width, self.view.frame.height * 0.3) 你追求的是这样的吗?

标签: uiview swift height xcode6


【解决方案1】:

您好,如果您愿意,可以创建此扩展。 2021 年更新 Swift 5

创建文件 Extends.Swift添加此代码(在您想要更改高度的地方添加 import foundation

extension UIView {
    /**
    Get Set x Position
    
    - parameter x: CGFloat
    */
    var x:CGFloat {
        get {
            return self.frame.origin.x
        }
        set {
            self.frame.origin.x = newValue
        }
    }
    /**
    Get Set y Position
    
    - parameter y: CGFloat
    */
    var y:CGFloat {
        get {
            return self.frame.origin.y
        }
        set {
            self.frame.origin.y = newValue
        }
    }
    /**
    Get Set Height
    
    - parameter height: CGFloat
    */
    var height:CGFloat {
        get {
            return self.frame.size.height
        }
        set {
            self.frame.size.height = newValue
        }
    }
    /**
    Get Set Width
    
    - parameter width: CGFloat
    */
    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)

【讨论】:

  • 没有初始化就不能设置宽度等等,只有一个get属性!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    这可以通过 Swift 3.0 中的各种方法实现 已在最新版本 2019 年 5 月

    直接为视图分配高度和宽度值:

    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 点, width: 视图宽度, height: 视野高度)

    对 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)
    

    【讨论】:

      【解决方案4】:

      分配questionFrame.frame.size.height= screenSize.height * 0.30 不会反映视图中的任何内容。因为它是一个 get-only 属性。如果你想改变 questionFrame 的框架,你可以使用下面的代码。

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

      【讨论】:

        【解决方案5】:

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

        我遵循以下步骤:

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

        【讨论】:

          【解决方案6】:

          Swift 3 和 Swift 4:

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

          【讨论】:

            【解决方案7】:

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

            1) 按住 Control 从框架视图(例如 questionFrame)拖动到主视图,在弹出窗口中选择“等高”。

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

            您会看到约束已从“等高到...”更改为“成比例的高度...”。

            【讨论】:

              【解决方案8】:

              给你。这应该工作。

              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)
              

              【讨论】:

              • 刚刚在 xcode 7.3 上尝试过。为了使这个 CGRectMake() 生效,UIView(我的视图实际上是 UIView 的子类)需要将 View->Mode 设置为“Redraw”或“Scale to Fit”,并且 CGRectMake() 需要在我的子类的 drawRect() 方法。否则故事板中的尺寸定义将生效。
              • 同时是x y width height,最好用userView.frame.size.height = 10 userView.frame.size.width = 10
              • CGRectMake 已重命名为 CGRect。以下代码应该适用于较新的 Swift 版本: questionFrame.frame = CGRect(x: 0 , y: 0, width: self.view.frame.width, height: self.view.frame.height * 0.7) answerFrame.frame = CGRect(x: 0, y: 0, width: self.view.frame.height * 0.7, self.view.frame.width, height: self.view.frame.height * 0.3)
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-06
              相关资源
              最近更新 更多