我目前正在通過Udacity
iOS開發Nanaodegree的方式,並且遇到了一個我非常努力解決的問題。我是開發新手,和Stackoverflow,所以這是我的第一篇文章....在這裏它走了;更新自動佈局約束來重新定位文本字段
我正在構建一個用於生成Memes的應用程序。它通過允許用戶選擇圖像並輸入一些文字來實現。我有一個UIView
。在那個UIView
我有2x UIToolbar
,2x UITextField
和UIImageView
。工具欄位於視圖的頂部和底部,文本字段分別位於視圖的下方和上方。 UIImageView
空間充滿了視圖的高度,並位於工具欄和textInputs下方。
在這裏看到screenshots of Storyboard and app
用戶能夠從自己的相冊中選擇圖片,或採取與他們的相機拍照,來填充UIImageView
。然後將UIImageView
設置爲Aspect Fit
以保持其正確的寬高比。
我在Interface Builder中設置了約束,以便UITextFields
與頂部和底部工具欄保持恆定的距離。
我遇到的問題是用戶需要旋轉設備來定位文本字段,以便它們位於圖像的頂部和底部。我的意思是,如果用戶選擇了橫向圖像,並且設備是縱向的,則用戶需要旋轉他們的設備以確保文本字段位於圖像的頂部。
我想要做的是在用戶選擇或拍攝圖像並且圖像已應用Aspect Fit後重新定位textField。
有人建議,我可以使用AVMakeRectWithAspectRatioInside
以產生具有UIImage
它具有後的同一尺寸的CGRect
已看點飛度施加,可使用的CGRect更新UIImageView
的幀,然後更新的約束。
我設法生產了新的CGRect
並更新了UIImageView
的框架。然後,我改變了對UITextFields
的限制,以使它們與UIImageView
而不是工具欄對齊,但UITextFields
在幀更新時不會自行重新定位。
在幀更新後我會調用以下內容;
view.setNeedUpdateConstraints()
如果有人有最好的方法來解決這個問題,這將是偉大的。
編輯:
這裏是從的viewController項目我已經創建隔離,並嘗試解決這個問題的代碼..
import UIKit
import AVFoundation
class ViewController: UIViewController {
@IBOutlet weak var imageViewPic: UIImageView!
@IBOutlet weak var topTextToToolberContraint: NSLayoutConstraint!
@IBOutlet weak var bottomTextToToolbarConstraint: NSLayoutConstraint!
@IBOutlet weak var topText: UILabel!
@IBOutlet weak var bottomText: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
let imageToDisplay = UIImage(named: "Captain-Picard-Facepalm")
imageViewPic.image = imageToDisplay
}
func updateFrame() {
let resizedImageSize = imageViewPic.image!.size
let imageViewBounds = imageViewPic.bounds
let newRect = AVMakeRectWithAspectRatioInsideRect(resizedImageSize, imageViewBounds)
imageViewPic.frame = newRect
}
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
updateFrame()
view.setNeedsLayout()
}
}
付諸視圖添加到使用所產生的
CGRect
層次結構中的所有約束'[self setNeedsLayout];'在更新幀的行之後。 – Kampai@Kampai唉這沒有解決問題:( –
做一件事添加改變框架的代碼在你的問題。 – Kampai