 				switch verticalAlignment {
 				case .bottom:
 					textLabelFrame.bottom = size.height
-
+					
 				case .top:
 					textLabelFrame.top = 0
-
+					
 				case .center, .fill:
 					textLabelFrame.verticalCenter = size.height / 2
 				}
+			}
+
+		case .imageBehindText:
+
+			// step 2: measure sizes
+
+			if let imageView = imageView {
+				if verticalAlignment == .fill && horizontalAlignment == .fill {
+					imageViewFrame.size = remainingSize
+				}
+				else {
+					imageViewFrame.size = imageView.sizeThatFitsSize(remainingSize, allowsTruncation: true).transform(imageView.transform)
+
+					if verticalAlignment == .fill {
+						imageViewFrame.height = remainingSize.height
+					}
+					else if horizontalAlignment == .fill {
+						imageViewFrame.width = remainingSize.width
+					}
+				}
+			}
+			else if let activityIndicator = activityIndicator {
+				imageViewFrame.size = activityIndicator.sizeThatFitsSize(remainingSize, allowsTruncation: true).transform(activityIndicator.transform)
+			}
+
+			if let textLabel = textLabel {
+				if verticalAlignment == .fill && horizontalAlignment == .fill {
+					textLabelFrame.size = remainingSize
+				}
+				else {
+					textLabelFrame.size = textLabel.sizeThatFitsSize(remainingSize, allowsTruncation: true).transform(textLabel.transform)
+				}
+			}
+
+			// step 3: measure horizontal positions
+
+			switch horizontalAlignment {
+			case .fill, .left:
+				imageViewFrame.left = 0
+				textLabelFrame.left = 0
+
+			case .right:
+				imageViewFrame.right = size.width
+				textLabelFrame.right = size.width
+
+			case .center:
+				imageViewFrame.horizontalCenter = size.width / 2
+				textLabelFrame.horizontalCenter = size.width / 2
+			}
+
+			// step 4: measure vertical positions
+
+			switch verticalAlignment {
+			case .fill, .top:
+				imageViewFrame.top = 0
+				textLabelFrame.top = 0
+
+			case .bottom:
+				imageViewFrame.bottom = size.height
+				textLabelFrame.bottom = size.height
+
+			case .center:
+				imageViewFrame.verticalCenter = size.height / 2
+				textLabelFrame.verticalCenter = size.height / 2
 			}
 		}
 


	public enum Arrangement {

		case imageBottom
		case imageLeft
		case imageRight

					textLabelFrame.horizontalCenter = size.width / 2
				}
			}

		case .imageLeft, .imageRight: // horizontal

			// step 2: measure sizes

			if let imageView = imageView {
