Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Commented code above each section is code (Swift) that the derived code is converted from */
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Foundation;
- using UIKit;
- namespace XamarinFormsApp1.Extensions
- {
- public class AlertController : UIAlertController
- {
- private string originalTitle;
- private string spaceAdjustedTitle;
- private UIImageView imageView = null;
- private CoreGraphics.CGSize previousImgViewSize = CoreGraphics.CGSize.Empty;
- public override UIAlertControllerStyle PreferredStyle
- {
- get
- {
- return UIAlertControllerStyle.Alert;
- }
- }
- public override string Title
- {
- //didSet
- //{
- // // Keep track of original title
- // if title != spaceAdjustedTitle {
- // originalTitle = title
- // }
- //}
- get
- {
- return originalTitle;
- }
- set
- {
- if (Title != spaceAdjustedTitle ||
- string.IsNullOrEmpty(Title) || string.IsNullOrEmpty(spaceAdjustedTitle))
- {
- originalTitle = value;
- }
- }
- }
- public void setTitleImage(UIImage image)
- {
- //guard let imageView = self.imageView else {
- // let imageView = UIImageView(image: image)
- //self.view.addSubview(imageView)
- //self.imageView = imageView
- //return
- //}
- //imageView.image = image
- if (this.imageView == null)
- {
- UIImageView imageView = new UIImageView(image);
- this.View.AddSubview(imageView);
- this.imageView = imageView;
- return;
- }
- imageView.Image = image;
- }
- public override void ViewDidLayoutSubviews()
- {
- //guard let imageView = imageView else {
- // super.viewDidLayoutSubviews()
- // return
- //}
- // // Adjust title if image size has changed
- // if previousImgViewSize != imageView.bounds.size {
- // previousImgViewSize = imageView.bounds.size
- // adjustTitle(for: imageView)
- //}
- // // Position `imageView`
- // let linesCount = newLinesCount(for: imageView)
- // let padding = Constants.padding(for: preferredStyle)
- // imageView.center.x = view.bounds.width / 2.0
- // imageView.center.y = padding + linesCount * lineHeight / 2.0
- //super.viewDidLayoutSubviews()
- if (imageView == null)
- {
- base.ViewDidLayoutSubviews();
- return;
- }
- // Adjust title if image size has changed
- if (previousImgViewSize != imageView.Bounds.Size)
- {
- previousImgViewSize = imageView.Bounds.Size;
- adjustTitle(imageView);
- }
- // Position `imageView`
- var linesCount = newLinesCount(imageView);
- var padding = Constants.Padding(PreferredStyle);
- var x = View.Bounds.Width / 2.0;
- var y = padding + linesCount * lineHeight / 2.0;
- CoreGraphics.CGPoint cgPoint = imageView.Center;
- cgPoint.X = (nfloat)x;
- cgPoint.Y = (nfloat)y;
- imageView.Center = cgPoint;
- base.ViewDidLayoutSubviews();
- }
- ///// Adds appropriate number of "\n" to `title` text to make space for `imageView`
- //private func adjustTitle(for imageView: UIImageView)
- //{
- // let linesCount = Int(newLinesCount(for: imageView))
- // let lines = (0..< linesCount).map({ _ in "\n" }).reduce("", +)
- // spaceAdjustedTitle = lines + (originalTitle ?? "")
- // title = spaceAdjustedTitle
- //}
- private void adjustTitle(UIImageView imageView)
- {
- var linesCount = (int)newLinesCount(imageView);
- var lines = Enumerable
- .Range(1, linesCount)
- .Select(i => "\n")
- .Aggregate((c, n) => $"{c}{n}");
- spaceAdjustedTitle = lines + (originalTitle ?? "");
- Title = spaceAdjustedTitle;
- }
- ///// - Return: Number new line chars needed to make enough space for `imageView`
- //private func newLinesCount(for imageView: UIImageView) -> CGFloat {
- // return ceil(imageView.bounds.height / lineHeight)
- //}
- private double newLinesCount(UIImageView imageView)
- {
- return Math.Ceiling(imageView.Bounds.Height / lineHeight);
- }
- /// Calculated based on system font line height
- //private lazy var lineHeight: CGFloat = {
- // let style: UIFontTextStyle = self.preferredStyle == .alert ? .headline : .callout
- // return UIFont.preferredFont(forTextStyle: style).pointSize
- //}()
- private float lineHeight {
- get
- {
- UIFontTextStyle style = this.PreferredStyle == UIAlertControllerStyle.Alert ? UIFontTextStyle.Headline : UIFontTextStyle.Callout;
- return (float)UIFont.GetPreferredFontForTextStyle(style).PointSize;
- }
- }
- //struct Constants {
- // static var paddingAlert: CGFloat = 22
- // static var paddingSheet: CGFloat = 11
- // static func padding(for style: UIAlertControllerStyle) -> CGFloat {
- // return style == .alert ? Constants.paddingAlert : Constants.paddingSheet
- // }
- //}
- struct Constants
- {
- static float paddingAlert = 22;
- static float paddingSheet = 11;
- public static float Padding(UIAlertControllerStyle style)
- {
- return style == UIAlertControllerStyle.Alert ? Constants.paddingAlert : Constants.paddingSheet;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment