Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

Commit

Permalink
Fix #322: Adjust height for popup when if it clips off screen
Browse files Browse the repository at this point in the history
  • Loading branch information
danielbogomazov authored and kylehickinson committed Oct 25, 2018
1 parent e1d2df2 commit d3dee8a
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 7 deletions.
35 changes: 28 additions & 7 deletions Client/Frontend/Popup/AlertPopupView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,32 +56,53 @@ class AlertPopupView: PopupView {
}

func updateSubviews() {
titleLabel.adjustsFontSizeToFitWidth = false
messageLabel.adjustsFontSizeToFitWidth = false

updateSubviews(resizePercentage: 1.0)

let paddingHeight = padding * 3.0
let externalContentHeight = dialogButtons.count == 0 ? paddingHeight : kPopupDialogButtonHeight + paddingHeight
let desiredHeight = UIScreen.main.bounds.height - externalContentHeight

if containerView.frame.height > desiredHeight {
let resizePercentage = desiredHeight / containerView.frame.height
titleLabel.adjustsFontSizeToFitWidth = true
messageLabel.adjustsFontSizeToFitWidth = true
updateSubviews(resizePercentage: resizePercentage)
}
}

fileprivate func updateSubviews(resizePercentage: CGFloat) {
let width: CGFloat = dialogWidth

var imageFrame: CGRect = dialogImage?.frame ?? CGRect.zero
if let dialogImage = dialogImage {
if let dialogImage = dialogImage, let dialogImageSize = dialogImage.image?.size {
imageFrame.size = CGSize(width: dialogImageSize.width * resizePercentage, height: dialogImageSize.height * resizePercentage)
imageFrame.origin.x = (width - imageFrame.width) / 2.0
imageFrame.origin.y = kPadding * 2.0
imageFrame.origin.y = kPadding * 2.0 * resizePercentage
dialogImage.frame = imageFrame
}

let titleLabelSize: CGSize = titleLabel.sizeThatFits(CGSize(width: width - kPadding * 3.0, height: CGFloat.greatestFiniteMagnitude))
var titleLabelSize: CGSize = titleLabel.sizeThatFits(CGSize(width: width - kPadding * 3.0, height: CGFloat.greatestFiniteMagnitude))
titleLabelSize.height = titleLabelSize.height * resizePercentage
var titleLabelFrame: CGRect = titleLabel.frame
titleLabelFrame.size = titleLabelSize
titleLabelFrame.origin.x = rint((width - titleLabelSize.width) / 2.0)
titleLabelFrame.origin.y = imageFrame.maxY + kPadding
titleLabelFrame.origin.y = imageFrame.maxY + kPadding * resizePercentage
titleLabel.frame = titleLabelFrame

let messageLabelSize: CGSize = messageLabel.sizeThatFits(CGSize(width: width - kPadding * 4.0, height: CGFloat.greatestFiniteMagnitude))
var messageLabelSize: CGSize = messageLabel.sizeThatFits(CGSize(width: width - kPadding * 4.0, height: CGFloat.greatestFiniteMagnitude))
messageLabelSize.height = messageLabelSize.height * resizePercentage
var messageLabelFrame: CGRect = messageLabel.frame
messageLabelFrame.size = messageLabelSize
messageLabelFrame.origin.x = rint((width - messageLabelSize.width) / 2.0)
messageLabelFrame.origin.y = rint(titleLabelFrame.maxY + kPadding * 1.5 / 2.0)
messageLabelFrame.origin.y = rint(titleLabelFrame.maxY + kPadding * 1.5 / 2.0 * resizePercentage)
messageLabel.frame = messageLabelFrame

var containerViewFrame: CGRect = containerView.frame
containerViewFrame.size.width = width
containerViewFrame.size.height = messageLabelFrame.maxY + kPadding * 1.5
containerViewFrame.size.height = rint(messageLabelFrame.maxY + kPadding * 1.5 * resizePercentage)
containerView.frame = containerViewFrame
}

Expand Down
1 change: 1 addition & 0 deletions Client/Frontend/Popup/PopupView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,7 @@ class PopupView: UIView, UIGestureRecognizerDelegate {
buttonData.isDefault = true
buttonData.handler = tapped
dialogButtons.append(buttonData)
layoutIfNeeded()
}

func addButton(title: String, tapped: (() -> PopupViewDismissType)?) {
Expand Down

0 comments on commit d3dee8a

Please sign in to comment.