- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个这样排列的 View 层次结构:
main view
---- scroll view
-------- label
-------- label
-------- text view
-------- horizontal stack view
-------- divider view (UIView)
-------- label
-------- container view (embeds a child view controller)
嵌入式 subview Controller 是一个 UICollectionViewController。
现在的问题是 Collection View Controller 包含很多元素,我希望 ScrollView 能够自动调整其内容大小,以便也考虑到 Collection View 的高度,但事实并非如此。所以目前我只能看到 Collection View 的第一个元素,但无法向下滚动。我尝试通过这种方式手动调整 Collection View 的内容大小:
func adjustContentSize() {
var contentRect: CGRect = .zero
for subview in self.scrollView.subviews {
contentRect = contentRect.union(subview.frame)
}
self.scrollView.contentSize = contentRect.size
}
但是内容大小仍然不正确:它正好等于窗口大小,即使它应该高很多以便为 Collection View 中的所有元素腾出位置。我认为问题主要与我嵌入 subview Controller 这一事实有关,因为通常 ScrollView 内容大小会自动调整。但是在这种情况下该怎么办?如何告诉 ScrollView 正确的内容大小?
最佳答案
在容器 View 上设置约束与在任何其他 View 上没有什么不同。
这是你的布局,有约束:
在运行时,它看起来像这样:
并且,滚动:
这里是所有需要的代码( Collection View 使用水平流):
//
// ViewController.swift
// Ramy
//
// Created by Don Mag on 8/7/19.
//
import UIKit
class ViewController: UIViewController {
}
extension UIColor {
static var random: UIColor {
return UIColor(red: .random(in: 0...1),
green: .random(in: 0...1),
blue: .random(in: 0...1),
alpha: 1.0)
}
}
class EmbeddedCollectionViewController: UICollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "ReuseID")
}
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 100
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ReuseID", for: indexPath)
cell.backgroundColor = UIColor.random
return cell
}
}
Storyboard的来源:
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="Ramy" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jJS-Jp-5Wb">
<rect key="frame" x="8" y="28" width="359" height="631"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label 1" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XwC-bl-fns">
<rect key="frame" x="153" y="8" width="53.5" height="20.5"/>
<color key="backgroundColor" red="0.99806135890000003" green="0.96808904409999996" blue="0.12760734560000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label 2" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VcB-Di-yle">
<rect key="frame" x="151.5" y="40.5" width="56" height="20.5"/>
<color key="backgroundColor" red="0.99806135890000003" green="0.96808904409999996" blue="0.12760734560000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="2P9-JD-ezE">
<rect key="frame" x="59.5" y="73" width="240" height="128"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="240" id="RSb-O4-Jy1"/>
<constraint firstAttribute="height" constant="128" id="ZNr-Tq-dig"/>
</constraints>
<string key="text">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="Urd-av-tKj">
<rect key="frame" x="54" y="213" width="251.5" height="20.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Horizontal" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iJ9-BV-XXm">
<rect key="frame" x="0.0" y="0.0" width="78.5" height="20.5"/>
<color key="backgroundColor" red="0.99806135890000003" green="0.96808904409999996" blue="0.12760734560000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Stack" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SlW-MH-lZj">
<rect key="frame" x="86.5" y="0.0" width="78.5" height="20.5"/>
<color key="backgroundColor" red="0.99806135890000003" green="0.96808904409999996" blue="0.12760734560000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="View" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="usj-S2-wXe">
<rect key="frame" x="173" y="0.0" width="78.5" height="20.5"/>
<color key="backgroundColor" red="0.99806135890000003" green="0.96808904409999996" blue="0.12760734560000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ube-Ox-WG0" userLabel="Divider View">
<rect key="frame" x="29.5" y="253.5" width="300" height="4"/>
<color key="backgroundColor" red="1" green="0.14913141730000001" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="300" id="3r0-U8-e4h"/>
<constraint firstAttribute="height" constant="4" id="8Zh-29-VuE"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label 3" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t4g-6L-Fxz">
<rect key="frame" x="151.5" y="277.5" width="56.5" height="20.5"/>
<color key="backgroundColor" red="0.99806135890000003" green="0.96808904409999996" blue="0.12760734560000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ae9-nr-NPW">
<rect key="frame" x="12" y="310" width="335" height="500"/>
<color key="backgroundColor" red="0.16078431369999999" green="0.62352941179999999" blue="0.81960784310000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="500" id="Ugi-NN-btd"/>
</constraints>
<connections>
<segue destination="iKt-In-mH7" kind="embed" id="xc0-HZ-ykL"/>
</connections>
</containerView>
</subviews>
<color key="backgroundColor" red="0.99942404029999998" green="0.88699374509999995" blue="0.6455106089" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="Ae9-nr-NPW" firstAttribute="leading" secondItem="jJS-Jp-5Wb" secondAttribute="leading" constant="12" id="46G-Do-tx2"/>
<constraint firstItem="Ae9-nr-NPW" firstAttribute="width" secondItem="jJS-Jp-5Wb" secondAttribute="width" constant="-24" id="9Gx-Qt-KD7"/>
<constraint firstItem="VcB-Di-yle" firstAttribute="centerX" secondItem="2P9-JD-ezE" secondAttribute="centerX" id="AbA-b2-Dc2"/>
<constraint firstItem="Ube-Ox-WG0" firstAttribute="centerX" secondItem="t4g-6L-Fxz" secondAttribute="centerX" id="J1X-MF-qh8"/>
<constraint firstAttribute="bottom" secondItem="Ae9-nr-NPW" secondAttribute="bottom" constant="8" id="J4e-Iv-CbW"/>
<constraint firstItem="VcB-Di-yle" firstAttribute="top" secondItem="XwC-bl-fns" secondAttribute="bottom" constant="12" id="Lbs-Pa-kn0"/>
<constraint firstItem="Urd-av-tKj" firstAttribute="top" secondItem="2P9-JD-ezE" secondAttribute="bottom" constant="12" id="MnP-kq-VMd"/>
<constraint firstItem="Ube-Ox-WG0" firstAttribute="top" secondItem="Urd-av-tKj" secondAttribute="bottom" constant="20" id="Nzj-mz-NBe"/>
<constraint firstItem="2P9-JD-ezE" firstAttribute="top" secondItem="VcB-Di-yle" secondAttribute="bottom" constant="12" id="PV8-rx-82P"/>
<constraint firstItem="t4g-6L-Fxz" firstAttribute="centerX" secondItem="Ae9-nr-NPW" secondAttribute="centerX" id="R8B-Yu-eaX"/>
<constraint firstAttribute="trailing" secondItem="Ae9-nr-NPW" secondAttribute="trailing" constant="12" id="Vl6-pC-fR7"/>
<constraint firstItem="t4g-6L-Fxz" firstAttribute="top" secondItem="Ube-Ox-WG0" secondAttribute="bottom" constant="20" id="dzM-uC-vDg"/>
<constraint firstItem="2P9-JD-ezE" firstAttribute="centerX" secondItem="Urd-av-tKj" secondAttribute="centerX" id="gIG-Ln-0ci"/>
<constraint firstItem="XwC-bl-fns" firstAttribute="top" secondItem="jJS-Jp-5Wb" secondAttribute="top" constant="8" id="h2g-bu-iYg"/>
<constraint firstItem="Ae9-nr-NPW" firstAttribute="top" secondItem="t4g-6L-Fxz" secondAttribute="bottom" constant="12" id="k5A-Ht-wuD"/>
<constraint firstItem="XwC-bl-fns" firstAttribute="centerX" secondItem="VcB-Di-yle" secondAttribute="centerX" id="s7H-0G-55o"/>
<constraint firstItem="Urd-av-tKj" firstAttribute="centerX" secondItem="Ube-Ox-WG0" secondAttribute="centerX" id="wIn-jA-Hwn"/>
</constraints>
</scrollView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="jJS-Jp-5Wb" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="8" id="HZI-i3-eQL"/>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="jJS-Jp-5Wb" secondAttribute="trailing" constant="8" id="TrF-oh-lbk"/>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="bottom" secondItem="jJS-Jp-5Wb" secondAttribute="bottom" constant="8" id="gCW-Kv-Vma"/>
<constraint firstItem="jJS-Jp-5Wb" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" constant="8" id="mdg-vi-3RB"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="138.40000000000001" y="138.98050974512745"/>
</scene>
<!--Embedded Collection View Controller-->
<scene sceneID="8Wg-59-nK4">
<objects>
<collectionViewController id="iKt-In-mH7" customClass="EmbeddedCollectionViewController" customModule="Ramy" customModuleProvider="target" sceneMemberID="viewController">
<collectionView key="view" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" id="pbM-fa-YQc">
<rect key="frame" x="0.0" y="0.0" width="335" height="500"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="Sd4-5y-JzD">
<size key="itemSize" width="50" height="50"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" misplaced="YES" id="UTC-Yv-lrd">
<rect key="frame" x="0.0" y="0.0" width="50" height="50"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO">
<rect key="frame" x="0.0" y="0.0" width="50" height="50"/>
<autoresizingMask key="autoresizingMask"/>
</view>
</collectionViewCell>
</cells>
<connections>
<outlet property="dataSource" destination="iKt-In-mH7" id="KsO-Bh-EEm"/>
<outlet property="delegate" destination="iKt-In-mH7" id="IOW-gi-oV8"/>
</connections>
</collectionView>
</collectionViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="PLD-Y7-bEq" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="888.79999999999995" y="312.14392803598201"/>
</scene>
</scenes>
</document>
关于swift - 带有容器 View 的 ScrollView 不能正确调整内容大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57348478/
我正在尝试创建一个类似于 BBC 新闻 native 应用程序的布局(使用known.js);一个垂直的ScrollView,其中有许多水平的ScrollView。我已经“工作”到了一切都渲染并且水平
我正在尝试创建一个类似于 BBC 新闻 native 应用程序的布局(使用known.js);一个垂直的ScrollView,其中有许多水平的ScrollView。我已经“工作”到了一切都渲染并且水平
我已经为以下问题寻找了很多答案,但没有找到合适的解决方案(也不是“不可能”)。我不想要双向 ScrollView! 我想要的只是拥有这样的东西: 如果我这样做(具有所需的布局属性),我会得到我的
我想使用 famo.us 标准 Scrollview但是有一个以不同速度滚动的背景图像以产生视差效果。 我想知道是否有一种方法可以连接到事件流,或者以某种方式将 Scrollviews 位置通过管道传
初始化程序中有一个带有 ScrollView(alwaysBounceVertical: false) 的属性,但我似乎找不到它了。 有谁知道如何禁用 SwiftUI ScrollView 上的垂直弹
在你说之前 “Google 说不要这样做” 请阅读我的所有问题!! 布局: ScrollView -> RelativeLayout -> ScrollView -> RelativeLayout 第
我想在 Windows 7 上创建一种体验(使用触摸),我可以在其中拥有一个只能垂直滚动的外部 ScrollViewer(它是屏幕的大小)。在那个 ScrollViewer 中,我将有几个其他的 Sc
我知道 Google 的人要求我们不要将 Scrollable View 放在另一个 Scrollable View 中,但他们是否有任何官方声明指示我们不要这样做? 最佳答案 试试这个 注意:这里
更新Xcode11 beta3后,我发现scrollview内部 View 的阴影会在边界处被切断,但在Xcode11 beta2中还可以。我只是使用底部填充来修复它,但我认为这不是一个好的解决方案。
我的 wpf 应用程序的结构如下: 我的目标是,如果 DataGrid 超过屏幕的高度来使用它自己的 Scrollviewer。目前只使用外部的 S
我在其他应用程序中使用了 ScrollView,只添加了 style={styles.container}与风格。然而,在这个应用程序中,我正在创建我的风格 alignItems:'flex-star
这是我的布局 xml。 ... 我已经尝试过此链接中的解决方案: ScrollView Inside ScrollVie
有没有办法在 nativescript 的 ScrollView 上隐藏滚动指示器?我试过 scrollBars='none' 和 css overflow='hidden' 但它不能同时工作。谢谢
所以我有一个 ScrollView ,里面有一个 TextView 。当文本的String长于屏幕宽度时,它只是在下一行中移动。我想通过在 ScrollView 中添加 HorizontalScr
我正在尝试在 android 的水平 ScrollView 中创建一个水平 ScrollView 。第一个水平 ScrollView 工作正常。当我尝试滚动时,第二个水平 ScrollView 不起作
我在同一布局中创建了两个 ScrollView。你可以说一个平行的 ScrollView 。我想手动滚动一个 ScrollView ,作为响应,另一个 ScrollView 应该以完全相同的方式滚动。
我在 android 中设计 UI,我在另一个 HorizontalScrollView 中有一个 HorizontalScrollView。但是,子 HorizontalScrollVi
我在另一个 ScrollView 中有 ScrollView 。我想滚动内部 ScrollView ,但外部 ScrollView 只滚动。如何解决这个问题? 谢谢。 最佳答案 sv01 =
我有两个 UIScrollView,如果用户在 ScrollView 中滚动,我想让另一个 ScrollView 也滚动。我已经阅读了一个解决方案,涉及将 pangesturerecognizer 从
我以编程方式创建了 UIScrollView 并向其中添加了多个 button。 它运行良好,没有任何问题。 但我需要通过复制先前 ScrollView 的内容来创建另一个 ScrollView 。
我是一名优秀的程序员,十分优秀!