【问题标题】:Swift how to get UIAlertController title heightSwift 如何获取 UIAlertController 标题高度
【发布时间】:2017-07-19 04:20:44
【问题描述】:

目前我正在快速开发 UIAlertController。我正在尝试向我的警报控制器添加一个活动指示器。我找到了以下解决方案,但是当标题大于一行时,微调器和标题重叠。为此我想,我需要知道标题标签的高度。

let spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
spinner.center = CGPoint(x: 130.5, y: 65.5)
spinner.startAnimating()
alert.view.addSubview(spinner)

请有人帮助我解决问题。

【问题讨论】:

    标签: ios swift swift3


    【解决方案1】:

    据我所知,无法访问标题高度。在 alert 视图上添加自定义 UIView 很容易,然后在自定义视图上添加标题标签、微调器、消息标签。

               let alert = UIAlertController(title: " ", message: " ", preferredStyle: UIAlertControllerStyle.alert)
               let customViewWidth: CGFloat = 270
                let viewRect = CGRect(x: 0, y: 0, width: customViewWidth, height: 150)
                let customView = UIView(frame: viewRect)
                customView.backgroundColor = UIColor.white
                customView.layer.cornerRadius = 20.0
                customView.clipsToBounds = true
    
                var spinnerTopPadding: CGFloat = 17.0
                if(!title.isEmpty) {
    
                    let titleRect = CGRect(x: 13.0, y: 17.0, width: customViewWidth - 26, height: 100)
                    let titleLabel = UILabel(frame: titleRect)
                    titleLabel.textAlignment = .center
                    titleLabel.numberOfLines = 0
                    titleLabel.font = titleLabel.font(withSize: 17.0)
                    titleLabel.lineBreakMode = .byWordWrapping
                    titleLabel.text = title
                    titleLabel.sizeToFit()
                    titleLabel.center = CGPoint(x: customViewWidth / 2, y: titleLabel.frame.size.height / 2 + 17.0)
                    customView.addSubview(titleLabel)
                    spinnerTopPadding = titleLabel.frame.size.height + 27
                }
    
                let spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
                spinner.center = CGPoint(x: customViewWidth / 2, y: spinnerTopPadding + spinner.frame.size.height / 2)
                spinner.startAnimating()
                customView.addSubview(spinner)
    
                var messageText = message.replacingOccurrences(of: "\n\n", with: "")
                messageText = message.replacingOccurrences(of: "\n", with: "")
                var spinnerBottomPadding: CGFloat = 17.0
                if (!message.isEmpty) {
    
                    let messageRect = CGRect(x: 13.0, y: spinnerTopPadding + spinner.frame.size.height + 10.0, width: customViewWidth - 26, height: 100)
                    let messageLabel = UILabel(frame: messageRect)
                    messageLabel.textAlignment = .center
                    messageLabel.numberOfLines = 0
                    messageLabel.font = messageLabel.font(withSize: 14.0)
                    messageLabel.lineBreakMode = .byWordWrapping
                    messageLabel.text = messageText
                    messageLabel.sizeToFit()
                    messageLabel.center = CGPoint(x: customViewWidth / 2, y: spinnerTopPadding + spinner.frame.size.height + messageLabel.frame.size.height / 2 + 10)
                    customView.addSubview(messageLabel)
                    spinnerBottomPadding = messageLabel.frame.size.height + 27
                }
    
                customView.frame.size.height = spinnerTopPadding + spinner.frame.size.height + spinnerBottomPadding
                alert.view.addSubview(customView)
                let alertControllerHeight = NSLayoutConstraint(item: alert.view, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: customView.frame.size.height)
                let alertControllerWidth = NSLayoutConstraint(item: alert.view, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: customViewWidth)
                alert.view.addConstraint(alertControllerHeight)
                alert.view.addConstraint(alertControllerWidth)
                let alertContainer = alert.view.subviews.first!.subviews.first!
                for container in alertContainer.subviews {
                    container.backgroundColor = UIColor.white
                    container.layer.cornerRadius = 20.0
                }
               self.present(alert, animated: true, completion: nil)
    

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多