【问题标题】:Scroll view with container view doesn't adjust the content size correctly带有容器视图的滚动视图无法正确调整内容大小
【发布时间】:2019-08-04 16:48:39
【问题描述】:

我有一个这样排列的视图层次结构:

main view
---- scroll view
-------- label
-------- label
-------- text view
-------- horizontal stack view
-------- divider view (UIView)
-------- label
-------- container view (embeds a child view controller)

嵌入的子视图控制器是一个UICollectionViewController

现在的问题是集合视图控制器包含很多元素,我希望滚动视图能够自动调整其内容大小以考虑集合视图高度,但事实并非如此。所以目前我只能看到集合视图的第一个元素,但我不能向下滚动。我尝试通过这种方式手动调整集合视图的内容大小:

func adjustContentSize() {
    var contentRect: CGRect = .zero

    for subview in self.scrollView.subviews {
        contentRect = contentRect.union(subview.frame)
    }

    self.scrollView.contentSize = contentRect.size
}

但内容大小仍然不正确:它与窗口大小完全相等,即使它应该大得多以便为集合视图中的所有元素腾出位置。我认为问题主要与我嵌入子视图控制器这一事实有关,因为通常滚动视图内容大小会自动调整。但是在这种情况下该怎么办?如何告诉滚动视图正确的内容大小?

【问题讨论】:

  • 不要使用self.scrollView.contentSize = contentRect.size ...使用约束并让自动布局为您完成。
  • @DonMag 通常约束是两个视图之间的关系。在这种情况下,我真的不知道如何表达类似的约束,我只能将其设置为单个视图的高度,而不是多个视图的高度。有什么建议吗?
  • "嵌入的子视图控制器是一个 UICollectionViewController。" -- 你如何定义集合视图的高度?你只是让它适合容器视图的大小吗?或者您是否试图让容器视图根据集合视图的高度更改其高度?
  • @DonMag 集合视图没有任何约束,因为它是集合视图控制器的主视图。容器视图改为固定在滚动视图内。
  • 你说你正在使用 "container view" -- 你的意思是你在 IB / Storyboard 中进行布局,并且你正在使用 @987654324 @带有嵌入式集合视图控制器?或者您是通过代码执行此操作,而您只是使用术语 容器视图 来表示您正在创建一个 UIView 并将集合视图添加为该视图的子视图?

标签: swift uiscrollview uikit


【解决方案1】:

在容器视图上设置约束与在任何其他视图上设置约束没有什么不同。

这是你的布局,有约束:

在运行时,它看起来像这样:

并且,滚动:

这里是所有需要的代码(集合视图使用水平流):

//
//  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

    }

}

以及故事板的来源:

<?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>

【讨论】:

  • 你能上传故事板文件吗?
  • @RamyAlZuhouri - 我已经发布了故事板文件的源代码。只需选择您的情节提要,右键单击并选择Open As -&gt; Source Code,删除那里的所有内容,然后从我的答案中复制/粘贴情节提要源代码。
【解决方案2】:

我不明白你为什么不能为所有这些视图设置约束?我知道一个约束是两个视图之间的关系,但是多个约束可以为所有这些视图建立关系。

对于你的情况,你在滚动视图中有 7 个视图,你可以做这样的事情,

scrollview.top = view1.top
view2.top = view1.bottom
view3.top = view2.bottom
...
view7.bottom = scrollview.bottom
// don't forget to set this
scrollview.top = scrollviewParent.top
scrollview.bottom = scrollviewParent.bottom
scrollview.leading = scrollviewParent.leading
scrollview.trailing = scrollviewParent.trailing

所以所有这些约束都应该起作用。

【讨论】:

  • 我已经在这样设置约束了,问题是滚动视图没有正确的内容大小。
【解决方案3】:

滚动视图的工作方式似乎有些混乱。滚动视图是屏幕上的一个“固定”高度区域,可在其“contentView”高度上滚动(这里指的是垂直滚动)。

当然,您的主滚动视图会环绕内容并自动调整高度,但请记住 UICollectionView 也是 UIScrollView 的扩展,它会在其父视图设置的范围内滚动其 contentView 的高度(这里是容器查看)

我希望你现在看到问题,你设置一个固定的大小或使用自动布局来确定“ContainerView”的高度,然后主滚动视图基于此调整它的“contentView”。这也迫使您的 UICollectionView 只能在该高度上滚动。问题是如果您的 collectionview 是动态的,您不知道在构建时将其设置为的高度。发生的情况是您可以滚动到主滚动视图的末尾,它将显示容器视图的推断或固定高度,在该高度内也应该可以滚动!! (如果你愿意,一个嵌套的滚动视图)

解决方案似乎如下。您将需要推断您的collectionview 的行数并设置containerview 的高度以匹配此(height_per_item * no_of_rows)。然后滚动视图 将环绕这个总高度并提供在整个 contentView 高度上的滚动(似乎谨慎地关闭 collectionview 中的垂直滚动,因为它不会被使用。我不完全了解嵌套滚动视图对性能的影响)

【讨论】:

  • 我仍然不清楚:我正在尝试将容器视图的高度设置为更高的值(例如 800),但可滚动内容没有得到调整,并且滚动的内容大小视图还是一样的。
  • 记得将“容器视图”的底部布局约束附加到“内容视图”的底部
  • 补充一点。确保 UIScrollView 只有 1 个包含所有其他视图的子视图(这是一种常见做法)。然后这个视图有效地成为你的 ScrollView 的 contentView 并且它的高度将作为滚动 contentview 的高度
【解决方案4】:

如果问题是 ScrollView ContentSize。您应该根据(高度 + 组件边距(Label、TextView、StatckView))加上 CollectionView.contentSize.height 来设置内容大小

并且Constraint应该在Controller B上重新加载CollectionView后设置

例子

ViewControllerA

let ViewControllerB = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerB") as! ViewControllerB
        ViewControllerB.compltion = { collectionHeight in
            ScrollView.heightConstaint.constant = 500 + collectionHeight
        }

这里 500 是 top+bottom margin + height of other components(stackView,Label,TextView)

ViewControllerB

override func viewDidLoad() {
        super.viewDidLoad()

        self.collectioView.reloadData()
        self.collectioView.performBatchUpdates(nil, completion: {
            (result) in
            if self.compltion != nil {
                self.compltion!(self.collectioView.contentSize.height)
            }
        })


        // Do any additional setup after loading the view.
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2019-04-13
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多