Bladeren bron

restrict the height of mixed text/media messages to 80% of the screen height while taking a minimum width for the text part into account

cyberta 5 jaren geleden
bovenliggende
commit
f0ee4bc847
1 gewijzigde bestanden met toevoegingen van 27 en 4 verwijderingen
  1. 27 4
      deltachat-ios/MessageKit/Layout/TextMediaMessageSizeCalculator.swift

+ 27 - 4
deltachat-ios/MessageKit/Layout/TextMediaMessageSizeCalculator.swift

@@ -27,6 +27,14 @@ import UIKit
 
 open class TextMediaMessageSizeCalculator: MessageSizeCalculator {
 
+    var maxMediaItemHeight: CGFloat {
+        return UIScreen.main.bounds.size.height * 0.8
+    }
+
+    var minTextWidth: CGFloat {
+        return 180
+    }
+
     public var incomingMessageLabelInsets = UIEdgeInsets(top: TextMediaMessageCell.insetTop,
                                                          left: TextMediaMessageCell.insetHorizontalBig,
                                                          bottom: TextMediaMessageCell.insetBottom,
@@ -48,17 +56,32 @@ open class TextMediaMessageSizeCalculator: MessageSizeCalculator {
         let maxImageWidth = messageContainerMaxWidth(for: message)
 
         let sizeForMediaItem = { (maxWidth: CGFloat, item: MediaItem) -> CGSize in
-            let maxTextWidth = maxWidth - self.messageLabelInsets(for: message).horizontal
+            var maxTextWidth = maxWidth - self.messageLabelInsets(for: message).horizontal
             var imageHeight = item.size.height
-            var itemWidth = item.size.width
+            var imageWidth = item.size.width
 
             if maxWidth < item.size.width {
                 // Maintain the ratio if width is too great
                 imageHeight = maxWidth * item.size.height / item.size.width
-                itemWidth = maxWidth
+                imageWidth = maxWidth
+            }
+
+            if self.maxMediaItemHeight < imageHeight {
+                // Maintain the ratio if height is too great
+                imageWidth = self.maxMediaItemHeight * imageWidth / imageHeight
+                imageHeight = self.maxMediaItemHeight
+                maxTextWidth = imageWidth - self.messageLabelInsets(for: message).horizontal
+
+            }
+
+            if imageWidth < self.minTextWidth {
+                // if text will be too narrow, increase again the size
+                imageHeight = self.minTextWidth * imageHeight / imageWidth
+                imageWidth = self.minTextWidth
+                maxTextWidth = imageWidth - self.messageLabelInsets(for: message).horizontal
             }
 
-            var messageContainerSize = CGSize(width: itemWidth, height: imageHeight)
+            var messageContainerSize = CGSize(width: imageWidth, height: imageHeight)
             switch message.kind {
             case .photoText(let mediaItem), .videoText(let mediaItem), .fileText(let mediaItem):
                 if let text = mediaItem.text {