2017-08-08 187 views
1

我有一個視圖控制器與UIView。在UIView的內部,我添加了像文本標籤這樣的元素。當我運行我的代碼時,它不在那裏。UIView子視圖不出現

import UIKit 

class EventDetailViewController: UIViewController { 

//variables that will hold data sent in through previous event controller 
var eventImage = "" 
var eventName = "" 
var eventDescription = "" 
var eventStreet = "" 
var eventCity = "" 
var eventState = "" 
var eventZip = 0 
var eventDate = "" 
// 
lazy var currentEventImage : UIImageView = { 
    let currentEvent = UIImageView() 
    let imageURL = URL(string: self.eventImage) 
    currentEvent.af_setImage(withURL: imageURL!) 
    currentEvent.clipsToBounds = true 
    currentEvent.translatesAutoresizingMaskIntoConstraints = false 
    currentEvent.contentMode = .scaleToFill 
    currentEvent.layer.masksToBounds = true 
    return currentEvent 
}() 
//will be responsible for creating the UIView that contains relevant event information 
let eventInfoContainerView: UIView = { 
    let infoContainer = UIView() 
    infoContainer.backgroundColor = UIColor.white 
    infoContainer.layer.masksToBounds = true 
    return infoContainer 
}() 

lazy var eventNameLabel: UILabel = { 
    let currentEventName = UILabel() 
    currentEventName.text = self.eventName 
    currentEventName.translatesAutoresizingMaskIntoConstraints = false 
    return currentEventName 
}() 


override func viewDidLoad() { 
    super.viewDidLoad() 
view.backgroundColor = UIColor.white 
    navigationItem.title = eventName 
    self.navigationItem.hidesBackButton = true 
    let backButton = UIBarButtonItem(image: UIImage(named: "icons8-Back-64"), style: .plain, target: self, action: #selector(GoBack)) 
    self.navigationItem.leftBarButtonItem = backButton 

    //Subviews will be added here 
    view.addSubview(currentEventImage) 
    view.addSubview(eventInfoContainerView) 
    eventInfoContainerView.addSubview(eventNameLabel) 
    //Constraints will be added here 
    _ = currentEventImage.anchor(view.centerYAnchor, left: nil, bottom: nil, right: nil, topConstant: -305, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: self.view.frame.width, heightConstant: 200) 
    _ = eventInfoContainerView.anchor(currentEventImage.bottomAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0) 
    _ = eventNameLabel.anchor(eventInfoContainerView.bottomAnchor, left: view.leftAnchor, bottom: nil, right: nil, topConstant: 20, leftConstant: 32, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0) 



} 

func GoBack(){ 
_ = self.navigationController?.popViewController(animated: true) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

} 

我有點失去了我看他們添加的元素到UIView以類似的方式,事情出現了教程。任何見解都會有所幫助。試圖改變多種事物,沒有任何事情真的讓它出現,我已經研究了幾個答案,我知道這可能是一些小事,我的眼睛只是看着過去,但在這一點上我無法發現它。

這是我的自定義方法設置約束

import UIKit 


extension UIView { 

func anchorToTop(_ top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil) { 

    anchorWithConstantsToTop(top, left: left, bottom: bottom, right: right, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0) 
} 

func anchorWithConstantsToTop(_ top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, topConstant: CGFloat = 0, leftConstant: CGFloat = 0, bottomConstant: CGFloat = 0, rightConstant: CGFloat = 0) { 

    translatesAutoresizingMaskIntoConstraints = false 

    if let top = top { 
     topAnchor.constraint(equalTo: top, constant: topConstant).isActive = true 
    } 

    if let bottom = bottom { 
     bottomAnchor.constraint(equalTo: bottom, constant: -bottomConstant).isActive = true 
    } 

    if let left = left { 
     leftAnchor.constraint(equalTo: left, constant: leftConstant).isActive = true 
    } 

    if let right = right { 
     rightAnchor.constraint(equalTo: right, constant: -rightConstant).isActive = true 
    } 

} 


func anchor(_ top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, topConstant: CGFloat = 0, leftConstant: CGFloat = 0, bottomConstant: CGFloat = 0, rightConstant: CGFloat = 0, widthConstant: CGFloat = 0, heightConstant: CGFloat = 0) -> [NSLayoutConstraint] { 
    translatesAutoresizingMaskIntoConstraints = false 

    var anchors = [NSLayoutConstraint]() 

    if let top = top { 
     anchors.append(topAnchor.constraint(equalTo: top, constant: topConstant)) 
    } 

    if let left = left { 
     anchors.append(leftAnchor.constraint(equalTo: left, constant: leftConstant)) 
    } 

    if let bottom = bottom { 
     anchors.append(bottomAnchor.constraint(equalTo: bottom, constant: -bottomConstant)) 
    } 

    if let right = right { 
     anchors.append(rightAnchor.constraint(equalTo: right, constant: -rightConstant)) 
    } 

    if widthConstant > 0 { 
     anchors.append(widthAnchor.constraint(equalToConstant: widthConstant)) 
    } 

    if heightConstant > 0 { 
     anchors.append(heightAnchor.constraint(equalToConstant: heightConstant)) 
    } 

    anchors.forEach({$0.isActive = true}) 

    return anchors 
} 

} 
+0

我沒有答案,但是,我發現Xcode的視圖調試功能方便這種事情。當它顯示你不期望的東西時,拍攝屏幕快照。然後,您可以查看層次結構,約束條件,離屏視圖和其他線索。 –

+0

我做了UIView在那裏,但標籤不是。當我檢查文本標籤中的變量時,它被存儲在那裏。但沒有外觀 – SJackson5

+0

@ SJackson5 - 你需要顯示你的'.anchor(...)'功能。如果我們不知道該功能在做什麼,我們就看不到會發生什麼。 – DonMag

回答

0

OK - 現在我們看到你.anchor(...)功能...

您的標籤頂部設置爲eventInfoContainerViewtopConstant: 20底部。 ..這是

改變該值來-20(假設ÿ OU要沿着視圖底部的標籤):

_ = eventNameLabel.anchor(eventInfoContainerView.bottomAnchor, left: view.leftAnchor, bottom: nil, right: nil, topConstant: -20, leftConstant: 32, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0) 

假設你.anchor(...)功能/擴展工作正常,我認爲唯一錯的是你忘了設置:

infoContainer.translatesAutoresizingMaskIntoConstraints = false 

當你初始化eventInfoContainerView

+0

我的自定義方法已經在我的錨定函數中處理過了。查看編輯 – SJackson5

+0

@ SJackson5 - 看我的編輯 – DonMag

+0

還是沒有 – SJackson5