2015-05-27 85 views
4

所以我在界面生成器中有一个视图,我希望它的高度基于其内部两个子视图的较大(高度方向)。但是,只有在加载视图并通过viewDidLoad填充内容时才能确定。iOS基于较大子视图高度的Autolayout视图高度

enter image description here

所以现在我有一个基于灰色文本(“S”)视图的底部布局。在应用程序中的大多数情况下,灰色文本将足够长以包装多行,然后视图高度良好。但是,在这种情况下,图像的高度比文字高。在界面构建器中有没有什么方法将自动布局约束设置为相对于两个较大的(实际上,相对于具有最大的maxY帧位置的元素更准确)?

回答

0

Rintaro的回答非常详细和有帮助,但它不是我想要的。它将尽可能将视图保持在一定的最小高度,但它也会在静态高度处切断标签。我最终做的只是使用两个> =底部空间来限制容器并忽略这两个=。这很好。

enter image description here

enter image description here

2

尝试这种情况:

enter image description here

TestView.xib

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES"> 
    <dependencies> 
     <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/> 
    </dependencies> 
    <objects> 
     <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> 
     <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> 
     <view contentMode="scaleToFill" id="iN0-l3-epB"> 
      <rect key="frame" x="0.0" y="0.0" width="320" height="320"/> 
      <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> 
      <subviews> 
       <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Pbb-AR-WNn"> 
        <rect key="frame" x="20" y="87" width="280" height="147"/> 
        <subviews> 
         <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="1000" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="1000" verticalCompressionResistancePriority="1000" image="dragon" translatesAutoresizingMaskIntoConstraints="NO" id="D5g-gu-1ev"> 
          <rect key="frame" x="16" y="16" width="64" height="64"/> 
         </imageView> 
         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="1000" verticalCompressionResistancePriority="1000" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5iM-Zb-gNn"> 
          <rect key="frame" x="88" y="16" width="176" height="115"/> 
          <string key="text">So I have a view in interface builder and I want its height to be based on the larger (height-wise) of the two subviews inside of it.</string> 
          <fontDescription key="fontDescription" type="system" pointSize="16"/> 
          <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> 
          <nil key="highlightedColor"/> 
         </label> 
        </subviews> 
        <color key="backgroundColor" white="0.90000000000000002" alpha="1" colorSpace="calibratedWhite"/> 
        <constraints> 
         <constraint firstAttribute="width" constant="280" id="2xn-1g-Vuq"/> 
         <constraint firstAttribute="bottom" secondItem="D5g-gu-1ev" secondAttribute="bottom" priority="750" constant="16" id="6rO-0a-xvp"/> 
         <constraint firstAttribute="bottom" secondItem="5iM-Zb-gNn" secondAttribute="bottom" priority="750" constant="16" id="B4u-tf-NJf"/> 
         <constraint firstItem="D5g-gu-1ev" firstAttribute="leading" secondItem="Pbb-AR-WNn" secondAttribute="leading" constant="16" id="GZ7-e9-kF0"/> 
         <constraint firstItem="D5g-gu-1ev" firstAttribute="top" secondItem="Pbb-AR-WNn" secondAttribute="top" constant="16" id="K8m-xD-EsT"/> 
         <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="D5g-gu-1ev" secondAttribute="bottom" constant="16" id="KEK-Q2-z4j"/> 
         <constraint firstItem="5iM-Zb-gNn" firstAttribute="leading" secondItem="D5g-gu-1ev" secondAttribute="trailing" constant="8" id="QLz-Q2-13S"/> 
         <constraint firstItem="5iM-Zb-gNn" firstAttribute="top" secondItem="Pbb-AR-WNn" secondAttribute="top" constant="16" id="bpN-WA-APq"/> 
         <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="5iM-Zb-gNn" secondAttribute="bottom" constant="16" id="dbe-Qg-fJU"/> 
         <constraint firstAttribute="trailing" secondItem="5iM-Zb-gNn" secondAttribute="trailing" constant="16" id="yIE-Eq-dw0"/> 
        </constraints> 
       </view> 
      </subviews> 
      <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> 
      <constraints> 
       <constraint firstAttribute="centerY" secondItem="Pbb-AR-WNn" secondAttribute="centerY" id="Ts3-XA-WC0"/> 
       <constraint firstAttribute="centerX" secondItem="Pbb-AR-WNn" secondAttribute="centerX" id="uS3-QD-gfi"/> 
      </constraints> 
      <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> 
      <point key="canvasLocation" x="365" y="328"/> 
     </view> 
    </objects> 
    <resources> 
     <image name="dragon" width="64" height="64"/> 
    </resources> 
</document> 

约束构造等:

H:[panel(280)] 
H:|-16-[imageView]-8-[labelView]-16-| 
V:|-16-[imageView]-([email protected],>=16)-| 
V:|-16-[labelView]-([email protected],>=16)-| 

imageView.contentHuggingPriorityForAxis(.Vertical) == 1000 
imageView.contentCompressionResistancePriorityForAxis(.Vertical) == 1000 

labelView.contentHuggingPriorityForAxis(.Vertical) == 1000 
labelView.contentCompressionResistancePriorityForAxis(.Vertical) == 1000 
+0

谢谢林太郎。事实证明,我甚至不需要有4个底部的限制。我所需要的是将底部布局设置为两个子视图的容器约束> = X,并完全省略= X布局。 –