简体   繁体   中英

Programmatically changing the height of a Storyboard view

Background:

I have a normal UIView in Storyboard (called statusView ) which has a height of 30 , and four constraints pinned to the leading, trailing, top space to the superview, and bottom space to the view below it.

Problem:

My goal is to alter the height of statusView , including animating the frame changes when the user performs an action. As such, statusView could be as short as 0 or as tall as 100 .

My expectation is that, given statusView is constrained to the superview and its nearest neighbor below, it should automatically "push" the views below when I alter its height.

Just to test, in viewDidAppear , I call the following:

self.statusView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 100.0)
self.statusView.setNeedsDisplay()

Issue : However, the height of 30 remains for statusView , despite me setting it to 0 .

Edit: posted Storyboard settings

This is the setting for statusView : 在此处输入图片说明

If you are using autolayout and want to set an explicit height for a view in your hierarchy, you should use autolayout to do it. I am assuming there is a height constraint set up in interface builder.

Create an IBOutlet for the constraint and link it up in interface builder.

@IBOutlet weak var statusViewHeightConstraint: NSLayoutConstraint!

Then, assuming this is just a size constraint with a constant for the height, just change it in your code:

statusViewHeightConstraint.constant = 100

You can animate this change by wrapping a layout call in an animation block right after modifying your constraint(s). Something like this:

UIView.animateKeyframes(withDuration: 0.2, delay: 0.0, options: [.beginFromCurrentState, .calculationModeCubic], animations: {
  self.view.layoutIfNeeded()
}, completion: nil)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM