这是我的情况,我有一个 UICollectionView
嵌套在 UITableVIew
中,表 View 垂直滚动,集合 View 在表 View 内水平滚动。
我已经将 tableview 作为集合 View 的代表,这里是一个代码片段:
我知道这段代码没有意义,因为我从中删除了很多东西我只是分享给你们看我如何设置 tableview 和 collectionview 以防万一它有帮助
class HomeViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UICollectionViewDataSource,UICollectionViewDelegate{
@IBOutlet weak var homeTable: UITableView!
func languageDidChange(){
tabBarItem.title = NSLocalizedString("home", comment: "")
homeTitle.text = NSLocalizedString("browseservice", comment: "")
}
@objc func languageDidChangeNotification(notification:NSNotification){
languageDidChange()
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(languageDidChangeNotification(notification:)), name: NSNotification.Name(rawValue: "LANGUAGE_DID_CHANGE"), object: nil)
languageDidChange()
SVProgressHUD.setDefaultMaskType(.custom)
SVProgressHUD.show(withStatus: "Loading...")
request.sendRequest("/some/url", headers: [:], method: .get, completion: {serverResponse in
if(serverResponse != nil){
//refresh the tableview when fetching data is complete
DispatchQueue.main.async {
self.homeTable.reloadData()
SVProgressHUD.dismiss()
}
}else{
SVProgressHUD.dismiss()
//show network error dialog
}
})
homeTable.delegate = self
homeTable.dataSource = self
}
let cellSpacingHeight: CGFloat = 0
func numberOfSections(in tableView:UITableView)->Int{
//number of categories:vertical
return 3
}
func tableView(_ tableView:UITableView,numberOfRowsInSection section:Int)->Int{
return 1
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return cellSpacingHeight
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
headerView.backgroundColor = UIColor.clear
return headerView
}
func tableView(_ tableView:UITableView,cellForRowAt indexPath: IndexPath)->UITableViewCell{
let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell") as! CategoryCell
//set the tabeview as the delegate for the collection view
cell.collectionView.delegate = self
cell.collectionView.dataSource = self
cell.collectionView.reloadData()
cell.collectionView.tag = indexPath.section
cell.serviceCategoryName.text = someTitles[indexPath.section]
return cell
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
for i in 0 ..< servicesData.count {
//this checks is the current tableview cell is equal to the current collection view cell
//if it is then the current collectionview cell belongs to the current tableview cell
//which it will then tell it how many elemnts are in the current tableview cell
if(collectionView.tag == servicesData[i].catId){
return servicesData[i].count
}
}
return 0
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "serviceCell", for: indexPath) as! ServiceCollectionCell
cell.serviceName.text = servicesResponse["data"][collectionView.tag]["subcategories"][indexPath.row]["name"].stringValue
let imageUrl = servicesResponse["data"][collectionView.tag]["subcategories"][indexPath.row]["photo"].stringValue
cell.serviceImg.loadImageFromUrl(url: imageUrl)
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//handle the click
}
}
class ServiceCollectionCell: UICollectionViewCell {
//a cell inside the collection view with image and a title
@IBOutlet weak var serviceImg: UIImageView!
@IBOutlet weak var serviceName: UILabel!
}
class CategoryCell: UITableViewCell {
//this is a single tableview cell containg the collection view
//every tableview cell has a collection view inside it
@IBOutlet weak var serviceCategoryName: UILabel!
@IBOutlet weak var collectionView: UICollectionView!
}
现在的问题是这段代码只在
iOS 13
上崩溃,我已经用其他版本尝试过它并且工作正常,这是它给我的错误:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSPlaceholderString initWithString:]: nil argument'
继承人完整的堆栈跟踪:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSPlaceholderString initWithString:]: nil argument'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff23c7127e __exceptionPreprocess + 350
1 libobjc.A.dylib 0x00007fff513fbb20 objc_exception_throw + 48
2 Foundation 0x00007fff2577d523 -[NSPlaceholderString initWithValidatedFormat:validFormatSpecifiers:locale:arguments:error:] + 0
3 Foundation 0x00007fff2577606b +[NSString stringWithString:] + 45
4 UIFoundation 0x00007fff4754444b __NSNormalizedLanguage + 97
5 UIFoundation 0x00007fff475443d3 ____NSNormalizedPreferredLanguage_block_invoke + 49
6 libdispatch.dylib 0x0000000105d7ad48 _dispatch_client_callout + 8
7 libdispatch.dylib 0x0000000105d7c297 _dispatch_once_callout + 66
8 UIFoundation 0x00007fff475440b0 -[NSParagraphArbitrator lineBreakContextBeforeIndex:lineFragmentWidth:range:] + 2859
9 UIFoundation 0x00007fff475694c4 -[NSCoreTypesetter _stringDrawingCoreTextEngineWithOriginalString:rect:padding:graphicsContext:forceClipping:attributes:stringDrawingOptions:drawingContext:wantsTextLineFragments:validatedAttributedString:firstNonRenderedCharacterIndex:foundSoftHyphenAtEOL:enginePathUsed:] + 5554
10 UIFoundation 0x00007fff47562a67 __NSStringDrawingEngine + 5999
11 UIFoundation 0x00007fff475612ce -[NSString(NSExtendedStringDrawing) boundingRectWithSize:options:attributes:context:] + 187
12 UIKitCore 0x00007fff484bd306 -[UILabel _textRectForBounds:limitedToNumberOfLines:includingShadow:] + 1456
13 UIKitCore 0x00007fff484bcb37 -[UILabel textRectForBounds:limitedToNumberOfLines:] + 50
14 UIKitCore 0x00007fff484c2519 -[UILabel _intrinsicSizeWithinSize:] + 384
15 UIKitCore 0x00007fff484c2831 -[UILabel intrinsicContentSize] + 245
16 UIKitCore 0x00007fff4848dd23 -[UIView(UIConstraintBasedLayout) _generateContentSizeConstraints] + 35
17 UIKitCore 0x00007fff4848d9f9 -[UIView(UIConstraintBasedLayout) _updateContentSizeConstraints] + 402
18 UIKitCore 0x00007fff484988ed -[UIView(AdditionalLayoutSupport) _updateSystemConstraints] + 112
19 UIKitCore 0x00007fff48497464 -[UIView(AdditionalLayoutSupport) _sendUpdateConstraintsIfNecessaryForSecondPass:] + 489
20 UIKitCore 0x00007fff48497a38 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededCollectingViews:forSecondPass:] + 1193
21 UIKitCore 0x00007fff484978c5 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededCollectingViews:forSecondPass:] + 822
22 UIKitCore 0x00007fff484978c5 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededCollectingViews:forSecondPass:] + 822
23 Foundation 0x00007fff258d8263 -[NSISEngine withBehaviors:performModifications:] + 84
24 UIKitCore 0x00007fff48497c4e -[UIView(AdditionalLayoutSupport) _recursiveUpdateConstraintsIfNeededCollectingViews:forSecondPass:] + 112
25 UIKitCore 0x00007fff484978c5 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededCollectingViews:forSecondPass:] + 822
26 UIKitCore 0x00007fff484978c5 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededCollectingViews:forSecondPass:] + 822
27 UIKitCore 0x00007fff484978c5 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededCollectingViews:forSecondPass:] + 822
28 Foundation 0x00007fff258d8263 -[NSISEngine withBehaviors:performModifications:] + 84
29 UIKitCore 0x00007fff48497f13 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededWithViewForVariableChangeNotifications:] + 632
30 UIKitCore 0x00007fff48498c51 -[UIView(AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeededWithViewForVariableChangeNotifications:] + 393
31 UIKitCore 0x00007fff48563fda -[UIView(Hierarchy) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 272
32 UIKitCore 0x00007fff485784bd -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2478
33 QuartzCore 0x00007fff2b131db1 -[CALayer layoutSublayers] + 255
34 QuartzCore 0x00007fff2b137fa3 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 517
35 UIKitCore 0x00007fff48563635 -[UIView(Hierarchy) layoutBelowIfNeeded] + 980
36 UIKitCore 0x00007fff4856a626 +[UIView(Animation) performWithoutAnimation:] + 84
37 UIKitCore 0x00007fff48297660 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 1291
38 UIKitCore 0x00007fff4826043b -[UITableView _updateVisibleCellsNow:] + 3081
39 UIKitCore 0x00007fff4828055f -[UITableView layoutSubviews] + 194
40 UIKitCore 0x00007fff485784bd -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2478
41 QuartzCore 0x00007fff2b131db1 -[CALayer layoutSublayers] + 255
42 QuartzCore 0x00007fff2b137fa3 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 517
43 QuartzCore 0x00007fff2b1438da _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 80
44 QuartzCore 0x00007fff2b08a848 _ZN2CA7Context18commit_transactionEPNS_11TransactionEd + 324
45 QuartzCore 0x00007fff2b0bfb51 _ZN2CA11Transaction6commitEv + 643
46 QuartzCore 0x00007fff2b0c04ba _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 76
47 CoreFoundation 0x00007fff23bd3867 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
48 CoreFoundation 0x00007fff23bce2fe __CFRunLoopDoObservers + 430
49 CoreFoundation 0x00007fff23bce97a __CFRunLoopRun + 1514
50 CoreFoundation 0x00007fff23bce066 CFRunLoopRunSpecific + 438
51 GraphicsServices 0x00007fff384c0bb0 GSEventRunModal + 65
52 UIKitCore 0x00007fff48092d4d UIApplicationMain + 1621
53 Taskmoby 0x000000010383d12b main + 75
54 libdyld.dylib 0x00007fff5227ec25 start + 1
55 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
现在我试图调试我发现的问题:
- 该错误仅发生在 iOS 13 上
- 来自服务器的数据是完整的,没有缺失值或零值,因为它适用于早期版本
- 只有当在 tableview 单元格内呈现一个 collectionview 单元格时才会发生错误,我尝试从此函数更改此函数:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if(collectionView.tag == servicesData[i].catId){
return servicesData[i].count
}
}
return 0
}
到
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if(collectionView.tag == servicesData[i].catId){
return 0
}
}
return 0
}
因此,无论它总是返回零
collectionview cell
项,这都会使 tableview cell
为空,并且当我这样做时不会发生错误。只有在 collectionview cell
中渲染 tableview cell
时才会出现。我还仔细检查了 Storyboard上的所有
IBOutlets
和 ViewController
我正在使用
XCode 11
我知道这很令人困惑,但如果您能提出任何可能导致此问题的建议,我将不胜感激。
感谢并抱歉糟糕的写作。
最佳答案
我使用以下更改复制了您的代码,它也可以在 iOS 13 上正常运行。
class HomeController: UIViewController, UITableViewDelegate, UITableViewDataSource, UICollectionViewDataSource, UICollectionViewDelegate {
@IBOutlet weak var homeTable: UITableView!
var servicesResponse: [String: Any] = [:]
var someTitles: [String] = ["Test11", "Test22", "Test33"]
var servicesData: [Cat] = [Cat()]
var request = NSURLRequest()
func languageDidChange(){
tabBarItem.title = NSLocalizedString("home", comment: "")
// homeTitle.text = NSLocalizedString("browseservice", comment: "")
}
@objc func languageDidChangeNotification(notification:NSNotification){
languageDidChange()
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(languageDidChangeNotification(notification:)), name: NSNotification.Name(rawValue: "LANGUAGE_DID_CHANGE"), object: nil)
languageDidChange()
// SVProgressHUD.setDefaultMaskType(.custom)
// SVProgressHUD.show(withStatus: "Loading...")
// request.sendRequest("/some/url", headers: [:], method: .get, completion: {serverResponse in
// if(serverResponse != nil){
//refresh the tableview when fetching data is complete
DispatchQueue.main.async {
self.homeTable.reloadData()
// SVProgressHUD.dismiss()
}
// } else {
// SVProgressHUD.dismiss()
//show network error dialog
// }
// })
homeTable.delegate = self
homeTable.dataSource = self
}
let cellSpacingHeight: CGFloat = 0
func numberOfSections(in tableView:UITableView)->Int{
//number of categories:vertical
return 3
}
func tableView(_ tableView:UITableView,numberOfRowsInSection section:Int)->Int{
return 1
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return cellSpacingHeight
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
headerView.backgroundColor = UIColor.clear
return headerView
}
func tableView(_ tableView:UITableView,cellForRowAt indexPath: IndexPath)->UITableViewCell{
let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell") as! CategoryCell
//set the tabeview as the delegate for the collection view
cell.collectionView.delegate = self
cell.collectionView.dataSource = self
cell.collectionView.reloadData()
cell.collectionView.tag = indexPath.section
cell.serviceCategoryName.text = someTitles[indexPath.section]
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
for i in 0 ..< servicesData.count {
//this checks is the current tableview cell is equal to the current collection view cell
//if it is then the current collectionview cell belongs to the current tableview cell
//which it will then tell it how many elemnts are in the current tableview cell
if(collectionView.tag == servicesData[i].catId){
return servicesData[i].count
}
}
return 0
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "serviceCell", for: indexPath) as! ServiceCollectionCell
if let data = servicesResponse["data"] as? [Any],
let cTag = data[collectionView.tag] as? [String: Any],
let subCat = cTag["subcategories"] as? [Any],
let rowItem = subCat[indexPath.row] as? [String: Any] {
if let name = rowItem["name"] as? String {
cell.serviceName.text = name
}
if let photo = rowItem["photo"] as? String {
// cell.serviceImg.loadImageFromUrl(url: photo)
}
}
// cell.serviceName.text = servicesResponse["data"][collectionView.tag]["subcategories"][indexPath.row]["name"].stringValue
// let imageUrl = servicesResponse["data"][collectionView.tag]["subcategories"][indexPath.row]["photo"].stringValue
// cell.serviceImg.loadImageFromUrl(url: imageUrl)
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//handle the click
}
}
class ServiceCollectionCell: UICollectionViewCell {
//a cell inside the collection view with image and a title
@IBOutlet weak var serviceImg: UIImageView!
@IBOutlet weak var serviceName: UILabel!
}
class CategoryCell: UITableViewCell {
//this is a single tableview cell containg the collection view
//every tableview cell has a collection view inside it
@IBOutlet weak var serviceCategoryName: UILabel!
@IBOutlet weak var collectionView: UICollectionView!
}
class Cat {
var catId: Int = 0
var count = 1
}
Storyboard的代码是
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15509"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="collection view cell content view" minToolsVersion="11.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="HomeController" customModule="test" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="nhS-7j-f3F">
<rect key="frame" x="0.0" y="44" width="414" height="818"/>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="CategoryCell" rowHeight="200" id="VrW-Ke-kBg" customClass="CategoryCell" customModule="test" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="414" height="200"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="VrW-Ke-kBg" id="RKz-Go-80Z">
<rect key="frame" x="0.0" y="0.0" width="414" height="200"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gxd-Hu-fxa">
<rect key="frame" x="0.0" y="0.0" width="414" height="21"/>
<constraints>
<constraint firstAttribute="height" constant="21" id="Hkq-2Q-chn"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="ln8-0Z-wPu">
<rect key="frame" x="0.0" y="21" width="414" height="179"/>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<collectionViewFlowLayout key="collectionViewLayout" automaticEstimatedItemSize="YES" minimumLineSpacing="10" minimumInteritemSpacing="10" id="ydv-5j-rCl">
<size key="itemSize" width="100" height="100"/>
<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" reuseIdentifier="serviceCell" id="LQp-yC-8cB" customClass="ServiceCollectionCell" customModule="test" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="100" height="100"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<collectionViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" id="8Vu-bZ-RfG">
<rect key="frame" x="0.0" y="0.0" width="100" height="100"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CXV-6d-gQK">
<rect key="frame" x="0.0" y="0.0" width="100" height="21"/>
<constraints>
<constraint firstAttribute="height" constant="21" id="EQX-Bi-KtI"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="pencil.circle.fill" catalog="system" translatesAutoresizingMaskIntoConstraints="NO" id="RJK-Aa-V2E">
<rect key="frame" x="0.0" y="21.5" width="100" height="78"/>
</imageView>
</subviews>
<color key="backgroundColor" systemColor="systemTealColor" red="0.35294117650000001" green="0.7843137255" blue="0.98039215690000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="RJK-Aa-V2E" firstAttribute="leading" secondItem="CXV-6d-gQK" secondAttribute="leading" id="BWM-6w-bZV"/>
<constraint firstAttribute="bottom" secondItem="RJK-Aa-V2E" secondAttribute="bottom" id="bAo-gp-uve"/>
<constraint firstItem="RJK-Aa-V2E" firstAttribute="top" secondItem="CXV-6d-gQK" secondAttribute="bottom" id="c1n-ij-MX9"/>
<constraint firstItem="CXV-6d-gQK" firstAttribute="leading" secondItem="8Vu-bZ-RfG" secondAttribute="leading" id="eNs-wY-1jn"/>
<constraint firstItem="RJK-Aa-V2E" firstAttribute="trailing" secondItem="CXV-6d-gQK" secondAttribute="trailing" id="lOg-qT-oxF"/>
<constraint firstAttribute="trailing" secondItem="CXV-6d-gQK" secondAttribute="trailing" id="pt1-Ob-Ebe"/>
<constraint firstItem="CXV-6d-gQK" firstAttribute="top" secondItem="8Vu-bZ-RfG" secondAttribute="top" id="tUB-I6-kB6"/>
</constraints>
</collectionViewCellContentView>
<size key="customSize" width="100" height="100"/>
<connections>
<outlet property="serviceImg" destination="RJK-Aa-V2E" id="DFl-xu-fIG"/>
<outlet property="serviceName" destination="CXV-6d-gQK" id="HMy-Nk-ibF"/>
</connections>
</collectionViewCell>
</cells>
<connections>
<outlet property="dataSource" destination="VrW-Ke-kBg" id="fDo-ik-rDx"/>
<outlet property="delegate" destination="VrW-Ke-kBg" id="Lwk-vV-Ifm"/>
</connections>
</collectionView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="gxd-Hu-fxa" secondAttribute="trailing" id="YTd-BP-uW4"/>
<constraint firstItem="ln8-0Z-wPu" firstAttribute="leading" secondItem="gxd-Hu-fxa" secondAttribute="leading" id="dfk-tW-AHH"/>
<constraint firstItem="gxd-Hu-fxa" firstAttribute="top" secondItem="RKz-Go-80Z" secondAttribute="top" id="mMJ-Dj-WNL"/>
<constraint firstItem="ln8-0Z-wPu" firstAttribute="top" secondItem="gxd-Hu-fxa" secondAttribute="bottom" id="sQm-Ig-FPg"/>
<constraint firstItem="ln8-0Z-wPu" firstAttribute="trailing" secondItem="gxd-Hu-fxa" secondAttribute="trailing" id="tY2-gz-ZPw"/>
<constraint firstItem="gxd-Hu-fxa" firstAttribute="leading" secondItem="RKz-Go-80Z" secondAttribute="leading" id="w8J-ZE-qXq"/>
<constraint firstAttribute="bottom" secondItem="ln8-0Z-wPu" secondAttribute="bottom" id="zKH-HT-ryI"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="collectionView" destination="ln8-0Z-wPu" id="gFz-eZ-2NT"/>
<outlet property="serviceCategoryName" destination="gxd-Hu-fxa" id="Ld1-Ne-9wM"/>
</connections>
</tableViewCell>
</prototypes>
<sections/>
<connections>
<outlet property="dataSource" destination="BYZ-38-t0r" id="wk8-DM-4cB"/>
<outlet property="delegate" destination="BYZ-38-t0r" id="ohu-1O-Rlv"/>
</connections>
</tableView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="top" secondItem="nhS-7j-f3F" secondAttribute="top" id="GJS-DX-9vb"/>
<constraint firstItem="nhS-7j-f3F" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="cq6-Ms-6QE"/>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="nhS-7j-f3F" secondAttribute="trailing" id="tGv-ai-93c"/>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="bottom" secondItem="nhS-7j-f3F" secondAttribute="bottom" id="x3a-Np-HYC"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
<connections>
<outlet property="homeTable" destination="nhS-7j-f3F" id="JwT-Ak-X5y"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="139" y="138"/>
</scene>
</scenes>
<resources>
<image name="pencil.circle.fill" catalog="system" width="64" height="60"/>
</resources>
</document>
希望能帮助到你!
关于ios - [NSPlaceholderString initWithString :]: nil argument' on iOS13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60340085/