【问题标题】:XCode: which constraints are needed to have an image with the same size as screen?XCode:需要哪些约束才能拥有与屏幕大小相同的图像?
【发布时间】:2016-01-15 10:51:09
【问题描述】:

在我的应用程序中有一个UIViewController,其唯一的工作是显示从服务器下载的图像。我希望此图像具有与默认屏幕相同的大小;此外,由于此图像是一种配方,我希望用户能够放大/缩小图像以便更好地阅读,这就是我将UIImageview 嵌入到UIScrollView 中的原因。

UIScrollView 有 4 个约束:UIScrollViewUIViewController 之间的 4 个距离都设置为 0。

UIImageView 有 4 个约束:UIImageView 和包含它的 UIScrollView 之间的 4 个距离都设置为 0。

不管怎样,你可以从下面的截图中看到

结果不如预期:UIScrollViewUIViewController 顶部之间的距离更大,图像更大。

你知道如何得到想要的结果吗?

<!--Recipe View Controller-->
    <scene sceneID="y5Y-bz-arP">
        <objects>
            <viewController id="VnP-A1-Srr" customClass="RecipeViewController" customModule="Fishmeter" customModuleProvider="target" sceneMemberID="viewController">
                <layoutGuides>
                    <viewControllerLayoutGuide type="top" id="J4Y-SW-LaP"/>
                    <viewControllerLayoutGuide type="bottom" id="Yuj-fl-Q0L"/>
                </layoutGuides>
                <view key="view" contentMode="scaleToFill" id="1xx-WP-lNU">
                    <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                    <subviews>
                        <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5rg-8n-qc9">
                            <rect key="frame" x="27" y="94" width="558" height="486"/>
                            <subviews>
                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Y0D-XM-XJ8">
                                    <rect key="frame" x="159" y="158" width="240" height="128"/>
                                </imageView>
                            </subviews>
                            <constraints>
                                <constraint firstAttribute="trailing" secondItem="Y0D-XM-XJ8" secondAttribute="trailing" id="P5c-2q-jZO"/>
                                <constraint firstItem="Y0D-XM-XJ8" firstAttribute="leading" secondItem="5rg-8n-qc9" secondAttribute="leading" id="VkK-Pa-vmE"/>
                                <constraint firstAttribute="bottom" secondItem="Y0D-XM-XJ8" secondAttribute="bottom" id="mzG-vW-1fV"/>
                                <constraint firstItem="Y0D-XM-XJ8" firstAttribute="top" secondItem="5rg-8n-qc9" secondAttribute="top" id="uoZ-V1-kxX"/>
                            </constraints>
                        </scrollView>
                    </subviews>
                    <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                    <constraints>
                        <constraint firstAttribute="trailingMargin" secondItem="5rg-8n-qc9" secondAttribute="trailing" id="PbP-OD-eRM"/>
                        <constraint firstItem="Yuj-fl-Q0L" firstAttribute="top" secondItem="5rg-8n-qc9" secondAttribute="bottom" id="TQL-96-UgX"/>
                        <constraint firstItem="5rg-8n-qc9" firstAttribute="leading" secondItem="1xx-WP-lNU" secondAttribute="leadingMargin" id="XEX-ck-lZi"/>
                        <constraint firstItem="5rg-8n-qc9" firstAttribute="top" secondItem="J4Y-SW-LaP" secondAttribute="bottom" constant="-10" id="lL6-Dk-MZe"/>
                    </constraints>
                </view>
                <connections>
                    <outlet property="recipeImage" destination="Y0D-XM-XJ8" id="5pc-vd-Ak8"/>
                    <outlet property="scrollView" destination="5rg-8n-qc9" id="Ieo-Uk-HIB"/>
                </connections>
            </viewController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="cUt-8l-j6r" userLabel="First Responder" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="3265" y="-311"/>
    </scene>

【问题讨论】:

  • 用UIWebView岂不是更好?并根据需要设置约束。它将默认缩放功能。
  • 谢谢...我会立即尝试并通知您。我不知道有 UIWebView...我用 iOS 和 Swift 编程的时间很短
  • @msmq 恐怕我得到了相同的结果......顶部总是有一些额外的空间(现在是灰色)并且图像总是太大......

标签: xcode swift size-classes


【解决方案1】:

为了让 UIScrollView 正确处理其内容,滚动视图内容的约束不能由滚动视图的大小来定义。约束必须引用在滚动视图之外定义的大小。

因此,从 UIImageView 中移除约束,并将约束设置为距 UIViewController 主视图的顶部、底部、左侧和右侧的距离为 0

--T

【讨论】:

  • 我试图从 UIImageView 中删除所有约束,但现在 IB 说存在“可滚动内容大小歧义”......我应该给 UIImageView? 哪些其他约束跨度>
  • 我的错 - 添加约束以匹配主视图的宽度和高度。那应该可以解决您的问题。
  • 你的意思是我应该让UIImageView 的大小与UIViewController? 相同
  • 让我们重新开始,因为我想我把事情搞糊涂了。从图像视图中删除所有约束。现在,添加您拥有的原始约束(滚动视图上距顶部、底部、前导、尾随的 0 距离)。现在,还要在图像视图和 uiviewcontroller 主视图之间添加等宽和等高约束。我刚刚自己做了这个,以确认一切都很好......它是;]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2015-09-27
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多