CommunityRecommnendViewController.swift 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. //
  2. // CommunityRecommnendViewController.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/6/28.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import JXSegmentedView
  10. import Kingfisher
  11. import SwiftyMediator
  12. class CommunityRecommnendViewController: UIViewController {
  13. override func didReceiveMemoryWarning() {
  14. super.didReceiveMemoryWarning()
  15. KingfisherManager.shared.cache.clearDiskCache()
  16. KingfisherManager.shared.cache.clearMemoryCache()
  17. }
  18. deinit {
  19. NXLLog("deinit")
  20. if observe != nil {
  21. NotificationCenter.default.removeObserver(observe!)
  22. }
  23. }
  24. weak var observe : NSObjectProtocol?
  25. var communityRecommendDataModels = Array<CommunityRecommendDataModel>()
  26. /// 评论需要的模型
  27. var communityRecommendDataModel : CommunityRecommendDataModel?
  28. var communityRecommendCategoryModel : CommunityRecommendCategoryModel?
  29. var navigationBarIsHidden: Bool = false
  30. override func viewDidLoad() {
  31. super.viewDidLoad()
  32. setupViews()
  33. setupLayouts()
  34. setupData()
  35. }
  36. func setupViews() {
  37. view.backgroundColor = kf7f8faColor
  38. view.addSubview(tableView)
  39. }
  40. func setupLayouts() {
  41. tableView.snp.makeConstraints { (make) in
  42. make.top.left.right.equalToSuperview()
  43. make.height.equalTo(kScreenHeight-44-kNavBarTotalHeight-kTabBarTotalHeight-40)
  44. }
  45. tableView.reloadData()
  46. }
  47. func setupData() {
  48. //下拉刷新
  49. tableView.addHeader(withBeginRefresh: true, animation: true) {
  50. [weak self] (page) in
  51. self?.communityPostSuggestApi(page:page)
  52. }
  53. tableView.addAutoNormalFooter(withAutomaticallyRefresh: true, loadMoreBlock: {
  54. [weak self] (page) in
  55. self?.communityPostSuggestApi(page:page)
  56. })
  57. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("login"), object: nil, queue: OperationQueue.main, using: {
  58. [weak self] (notification) in
  59. self?.tableView.mj_header?.beginRefreshing()
  60. })
  61. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("loginOut"), object: nil, queue: OperationQueue.main, using: {
  62. [weak self] (notification) in
  63. self?.tableView.mj_header?.beginRefreshing()
  64. })
  65. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("followApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  66. let followStatusModel = notification.object as? FollowStatusModel
  67. if !(self?.communityRecommendDataModels.isEmpty ?? true) {
  68. for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
  69. if communityRecommendDataModel.uid == followStatusModel?.uid {
  70. communityRecommendDataModel.isFollow = followStatusModel?.isFollowStatus
  71. }
  72. }
  73. }
  74. self?.tableView.reloadData()
  75. }
  76. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("unlikeApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  77. let followStatusModel = notification.object as? FollowStatusModel
  78. if !(self?.communityRecommendDataModels.isEmpty ?? true) {
  79. for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
  80. if communityRecommendDataModel.id == followStatusModel?.postId {
  81. communityRecommendDataModel.isDislike = followStatusModel?.isFollowStatus
  82. }
  83. }
  84. }
  85. self?.tableView.reloadData()
  86. }
  87. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("islikeApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  88. let followStatusModel = notification.object as? FollowStatusModel
  89. if !(self?.communityRecommendDataModels.isEmpty ?? true) {
  90. for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
  91. if communityRecommendDataModel.id == followStatusModel?.postId {
  92. communityRecommendDataModel.isLike = followStatusModel?.isFollowStatus
  93. }
  94. }
  95. }
  96. self?.tableView.reloadData()
  97. }
  98. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("isCollectApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  99. let followStatusModel = notification.object as? FollowStatusModel
  100. if !(self?.communityRecommendDataModels.isEmpty ?? true) {
  101. for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
  102. if communityRecommendDataModel.id == followStatusModel?.postId {
  103. communityRecommendDataModel.isCollect = followStatusModel?.isFollowStatus
  104. }
  105. }
  106. }
  107. self?.tableView.reloadData()
  108. }
  109. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("isCommnetLikeApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  110. let followStatusModel = notification.object as? FollowStatusModel
  111. if !(self?.communityRecommendDataModels.isEmpty ?? true) {
  112. for communityRecommendDataModel in (self?.communityRecommendDataModels)! {
  113. if communityRecommendDataModel.id == followStatusModel?.postId {
  114. if !(communityRecommendDataModel.comment?.isEmpty ?? true ){
  115. for communityRecommendCommentModel in communityRecommendDataModel.comment! {
  116. if communityRecommendCommentModel.id == followStatusModel?.commnetId {
  117. communityRecommendCommentModel.isLike = followStatusModel?.isFollowStatus
  118. communityRecommendCommentModel.likeCount = followStatusModel?.commentLikeCount
  119. }
  120. }
  121. }
  122. }
  123. }
  124. }
  125. self?.tableView.reloadData()
  126. }
  127. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("communityDeletePostApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  128. let postId = notification.object as? Int
  129. if !(self?.communityRecommendDataModels.isEmpty ?? true) {
  130. for (index,communityRecommendDataModel) in (self?.communityRecommendDataModels)!.enumerated() {
  131. if communityRecommendDataModel.id == postId {
  132. self?.communityRecommendDataModels.remove(at: index)
  133. }
  134. }
  135. self?.tableView.reloadData()
  136. }
  137. }
  138. // observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("CommunityModuleRecommendTop"), object: nil, queue: OperationQueue.main, using: {
  139. // [weak self] (notification) in
  140. // if self?.isViewLoaded ?? true && ((self?.view.window) != nil) {
  141. // if self?.tableView.contentOffset == CGPoint(x: 0, y: 0) {
  142. // self?.tableView.mj_header.beginRefreshing()
  143. // }else {
  144. // self?.tableView.scrollToTop()
  145. // }
  146. // }
  147. // })
  148. }
  149. private lazy var tableView: UITableView = {
  150. let tableView = UITableView(frame: CGRect.zero, style: UITableView.Style.grouped)
  151. tableView.separatorStyle = .none
  152. tableView.backgroundColor = kf7f8faColor
  153. tableView.dataSource = self
  154. tableView.delegate = self
  155. tableView.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)
  156. return tableView
  157. }()
  158. private lazy var followTableHeaderView: CommunityFollowTableHeaderView = {
  159. let followTableHeaderView = CommunityFollowTableHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 286))
  160. return followTableHeaderView
  161. }()
  162. /// 显示键盘
  163. func showKeyBoardCommentView() {
  164. KeyBoardInputView.show(inputViewResultClosure: {
  165. [weak self] (text) in
  166. self?.communityPostCommentApi(text: text, complete: {
  167. [weak self] in
  168. self?.communityRecommendDataModel = nil
  169. })
  170. }) {
  171. [weak self] in
  172. self?.communityRecommendDataModel = nil
  173. }
  174. }
  175. }
  176. extension CommunityRecommnendViewController {
  177. /// 推荐feed流
  178. ///
  179. /// - Parameter page: 分页
  180. func communityPostSuggestApi(page:Int) {
  181. SwiftMoyaNetWorkServiceCommunity.shared().communityPostSuggestApi(page:page,categoryId:communityRecommendCategoryModel?.id ?? 0,completion: {
  182. [weak self] (communityRecommendFeedModel) -> (Void) in
  183. DIYEmptyView.emptyNoDataTableView(tableView: self?.tableView, imageStr: DIYEmptyViewImageStr.one, detailStr: DIYEmptyViewDetailString.one)
  184. let communityRecommendFeedModel = communityRecommendFeedModel as? CommunityRecommendFeedModel
  185. if communityRecommendFeedModel?.pagination?.currentPage == 1{
  186. self?.communityRecommendDataModels.removeAll()
  187. self?.tableView.resetNoMoreData()
  188. }
  189. self?.communityRecommendDataModels = (self?.communityRecommendDataModels)! + (communityRecommendFeedModel?.data!)!
  190. self?.tableView.reloadData()
  191. MJRefreshManager.mjRefreshManagerNoHiddenFooter(tableView: self?.tableView, pagination: communityRecommendFeedModel?.pagination)
  192. }) {
  193. [weak self] (loadingStatus) in
  194. MJRefreshManager.mjRefreshManagerLoadingStatus(tableView: self?.tableView,loadingStatus: loadingStatus)
  195. }
  196. }
  197. /// 评论
  198. func communityPostCommentApi(text:String,complete:@escaping () -> ()) {
  199. let communityCustomCommnetModel = CommunityCustomCommnetModel()
  200. communityCustomCommnetModel.postId = communityRecommendDataModel?.id ?? 0
  201. communityCustomCommnetModel.content = text
  202. SwiftMoyaNetWorkServiceCommunity.shared().communityPostCommentApi(communityCustomCommnetModel: communityCustomCommnetModel) {
  203. [weak self] (communityPostCommentIdModel) -> (Void) in
  204. let communityPostCommentIdModel = communityPostCommentIdModel as? CommunityPostCommentIdModel
  205. let communityRecommendCommentModel = CommunityRecommendCommentModel()
  206. communityRecommendCommentModel.content = text
  207. communityRecommendCommentModel.id = communityPostCommentIdModel?.id
  208. communityRecommendCommentModel.username = UserModel.shared().getModel()?.username
  209. communityRecommendCommentModel.uid = UserModel.shared().getModel()?.uid
  210. if self?.communityRecommendDataModel?.comment?.isEmpty ?? true {
  211. self?.communityRecommendDataModel?.comment = Array<CommunityRecommendCommentModel>()
  212. }
  213. self?.communityRecommendDataModel?.comment?.insert(communityRecommendCommentModel, at: 0)
  214. VirusViewModel.shared.comment(communityRecommendDataModel: self?.communityRecommendDataModel, id: communityPostCommentIdModel?.id ?? 0,content: text)
  215. let count = (1 + (self?.communityRecommendDataModel?.commentCount ?? 0))
  216. self?.communityRecommendDataModel?.commentCount = count
  217. self?.tableView.reloadData()
  218. complete()
  219. }
  220. }
  221. /// 删除帖子
  222. func communityDeleteApi(postId:Int,section:Int) {
  223. SwiftMoyaNetWorkServiceCommunity.shared().communityDeleteApi(postId: postId) { [weak self] (data) -> (Void) in
  224. if !(self?.communityRecommendDataModels.isEmpty ?? true) {
  225. self?.communityRecommendDataModels.remove(at: section)
  226. }
  227. self?.tableView.reloadData()
  228. }
  229. }
  230. }
  231. extension CommunityRecommnendViewController : UITableViewDelegate,UITableViewDataSource {
  232. func numberOfSections(in tableView: UITableView) -> Int {
  233. return communityRecommendDataModels.isEmpty ? 0 : communityRecommendDataModels.count
  234. }
  235. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  236. let communityRecommendDataModel = communityRecommendDataModels[section]
  237. if CommunityPostSuggestType(rawValue: communityRecommendDataModel.showType ?? "") == .post {
  238. return 6
  239. }else {
  240. return 1
  241. }
  242. }
  243. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  244. let communityRecommendDataModel = communityRecommendDataModels[indexPath.section]
  245. let communityPostSuggestCType = CommunityPostSuggestType(rawValue: communityRecommendDataModel.showType ?? "")
  246. switch communityPostSuggestCType {
  247. case .banner?: //banner
  248. let cell = CommunityBannerTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  249. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  250. cell.communityRecommendTypeDataModels = communityRecommendDataModel.data
  251. }
  252. return cell
  253. case .user?: //推荐用户
  254. let cell = CommunityRecommendFollowTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  255. cell.type = .recommend
  256. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  257. cell.communityRecommendTypeDataModels = communityRecommendDataModel.data
  258. cell.followClosure1 = {
  259. [weak self] (isFollow,communityRecommendTypeDataModel) in
  260. for (_,model) in (self?.communityRecommendDataModels.enumerated())! {
  261. let communityPostSuggestCType = CommunityPostSuggestType(rawValue: model.showType ?? "")
  262. if communityPostSuggestCType == .post {
  263. if model.uid == communityRecommendTypeDataModel.uid {
  264. model.isFollow = isFollow
  265. tableView.reloadData()
  266. }
  267. }
  268. }
  269. }
  270. }
  271. return cell
  272. case .video?: //推荐视频
  273. let cell = PopularVideoTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  274. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  275. cell.communityRecommendTypeDataModels = communityRecommendDataModel.data
  276. }
  277. return cell
  278. case .topic?: //推荐话题
  279. let cell = FeaturedTopicsTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  280. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  281. cell.communityRecommendTypeDataModels = communityRecommendDataModel.data
  282. }
  283. return cell
  284. case .post?: //贴子
  285. switch indexPath.row {
  286. //贴子用户
  287. case 0:
  288. let cell = CardContentUserTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  289. cell.communityRecommendDataModel = communityRecommendDataModel
  290. cell.followClosure = {
  291. [weak self] in
  292. CommunityFollowUserViewModel.shared.follow(communityRecommendDataModel: communityRecommendDataModel, communityRecommendDataModels: (self?.communityRecommendDataModels)!, tableView: tableView)
  293. }
  294. cell.likeClosure = { y in
  295. if UserModel.shared().isEqualUid(uid: communityRecommendDataModel.uid ?? 0) {
  296. CardContentUserDeleteView.sheetDeleteView(y: y, sureClosure: { [weak self] (cardContentUserDeleteView) in
  297. self?.communityDeleteApi(postId: communityRecommendDataModel.id ?? 0, section: indexPath.section)
  298. })
  299. }else {
  300. VirusViewModel.shared.like(communityRecommendDataModel: communityRecommendDataModel, y: y, tableView: tableView)
  301. }
  302. }
  303. return cell
  304. //内容标题
  305. case 1:
  306. if PostType(rawValue: communityRecommendDataModel.type ?? "html") == .html {
  307. let cell = CardTitleHTMLTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  308. cell.communityRecommendDataModel = communityRecommendDataModel
  309. return cell
  310. }else {
  311. let cell = CardContentTitleTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  312. cell.communityRecommendDataModel = communityRecommendDataModel
  313. return cell
  314. }
  315. //图片视频
  316. case 2:
  317. if PostType(rawValue: communityRecommendDataModel.type ?? "html") == .html {
  318. let cell = CardContentPicHTMLTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  319. cell.communityRecommendDataModel = communityRecommendDataModel
  320. return cell
  321. }else {
  322. let cell = CardContentPicVideoTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  323. cell.type = .recommend
  324. cell.communityRecommendDataModel = communityRecommendDataModel
  325. return cell
  326. }
  327. //点赞,收藏,分享
  328. case 3:
  329. let cell = CardContentActionTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  330. cell.communityRecommendDataModel = communityRecommendDataModel
  331. cell.praiseClosureName = { (button:UIButton) in
  332. VirusViewModel.shared.praise(communityRecommendDataModel: communityRecommendDataModel, tableView: tableView)
  333. }
  334. cell.collectClosureName = {
  335. (button:UIButton) in
  336. VirusViewModel.shared.collection(communityRecommendDataModel: communityRecommendDataModel, tableView: tableView)
  337. }
  338. return cell
  339. //评论列表
  340. case 4:
  341. let cell = CardContentCommentListTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  342. cell.communityRecommendDataModel = communityRecommendDataModel
  343. return cell
  344. //评论
  345. case 5:
  346. let cell = CardContentCommnetTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
  347. cell.addCommnetClosureName = {
  348. [weak self] in
  349. self?.communityRecommendDataModel = self?.communityRecommendDataModels[indexPath.section]
  350. self?.showKeyBoardCommentView()
  351. }
  352. cell.isAvatar = true
  353. return cell
  354. default:
  355. return UITableViewCell()
  356. }
  357. default:
  358. return UITableViewCell()
  359. }
  360. }
  361. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  362. let communityRecommendDataModel = communityRecommendDataModels[indexPath.section]
  363. let communityPostSuggestCType = CommunityPostSuggestType(rawValue: communityRecommendDataModel.showType ?? "")
  364. switch communityPostSuggestCType {
  365. //banner
  366. case .banner?:
  367. break
  368. //推荐用户
  369. case .user?:
  370. break
  371. //推荐视频
  372. case .video?:
  373. break
  374. //推荐话题
  375. case .topic?:
  376. break
  377. //贴子
  378. case .post?:
  379. switch indexPath.row {
  380. //贴子用户
  381. case 0:
  382. break
  383. //图片视频/内容标题/评论列表
  384. case 1,2:
  385. if PostType(rawValue: communityRecommendDataModel.type ?? "video") == .video {
  386. Mediator.push(CommunityRouterModuleType.pushPostDetailVoide(postId: "\(communityRecommendDataModel.id ?? 0)", departType: .others, topicId: 0))
  387. }else {
  388. Mediator.push(CommunityRouterModuleType.pushPostDetailContent(postId: "\(communityRecommendDataModel.id ?? 0)"))
  389. }
  390. break
  391. //点赞,收藏,分享
  392. case 3:
  393. break
  394. //评论
  395. case 5:
  396. break
  397. default:
  398. break
  399. }
  400. break
  401. default:
  402. break
  403. }
  404. }
  405. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  406. let communityRecommendDataModel = communityRecommendDataModels[indexPath.section]
  407. let communityPostSuggestCType = CommunityPostSuggestType(rawValue: communityRecommendDataModel.showType ?? "")
  408. switch communityPostSuggestCType {
  409. //banner
  410. case .banner?:
  411. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  412. return 160 * kScaleWidth
  413. }
  414. return 0
  415. //推荐用户
  416. case .user?:
  417. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  418. return 191
  419. }
  420. return 0
  421. //推荐视频
  422. case .video?:
  423. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  424. return 241
  425. }
  426. return 0
  427. //推荐话题
  428. case .topic?:
  429. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  430. return 173
  431. }
  432. return 0
  433. //贴子
  434. case .post?:
  435. switch indexPath.row {
  436. //贴子用户
  437. case 0:
  438. if communityRecommendDataModel.uid != nil {
  439. return 80
  440. }
  441. return 0
  442. //内容标题
  443. case 1:
  444. if PostType(rawValue: communityRecommendDataModel.type ?? "html") == .html {
  445. var titleStr = communityRecommendDataModel.title ?? ""
  446. titleStr = titleStr.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
  447. let subtitleLabelHeight = titleStr.heightForComment(font: kMediumFont16!, width: kScreenWidth-28, maxHeight: 44.0)
  448. return subtitleLabelHeight
  449. }else {
  450. var titleStr = communityRecommendDataModel.title ?? ""
  451. titleStr = titleStr.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
  452. var str = communityRecommendDataModel.content ?? ""
  453. str = str.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "")
  454. let subtitleLabelHeight = str.heightForComment(font: kRegularFont14!, width: kScreenWidth-28, maxHeight: 40.0)
  455. if titleStr == "" {
  456. return subtitleLabelHeight
  457. }else {
  458. return 22 + 6 + subtitleLabelHeight
  459. }
  460. }
  461. //图片视频
  462. case 2:
  463. if PostType(rawValue: communityRecommendDataModel.type ?? "html") == .html {
  464. return 82
  465. }else {
  466. let cardContentPicVideoModel = CardContentPicVideoModel()
  467. cardContentPicVideoModel.postType = PostType(rawValue: communityRecommendDataModel.type ?? "html")
  468. let imgStr = communityRecommendDataModel.img
  469. if communityRecommendDataModel.imgs?.count ?? 0 == 0 {
  470. if communityRecommendDataModel.img != "" && communityRecommendDataModel.img != nil {
  471. cardContentPicVideoModel.number = 1
  472. cardContentPicVideoModel.width = getImageWidth(imgStr: (imgStr)!)
  473. cardContentPicVideoModel.height = getImageHeight(imgStr: (imgStr)!)
  474. return cardContentPicVideoModel.collectionViewHeight() + 12
  475. }else {
  476. return 0
  477. }
  478. }else {
  479. if communityRecommendDataModel.imgs?.count ?? 0 == 1 {
  480. if communityRecommendDataModel.img != "" || communityRecommendDataModel.img != nil {
  481. cardContentPicVideoModel.number = 1
  482. cardContentPicVideoModel.width = getImageWidth(imgStr: (imgStr)!)
  483. cardContentPicVideoModel.height = getImageHeight(imgStr: (imgStr)!)
  484. return cardContentPicVideoModel.collectionViewHeight() + 12
  485. }else {
  486. return 0
  487. }
  488. }else {
  489. cardContentPicVideoModel.number = communityRecommendDataModel.imgs?.count ?? 0
  490. return cardContentPicVideoModel.collectionViewHeight() + 12
  491. }
  492. }
  493. }
  494. //点赞,收藏,分享
  495. case 3:
  496. return 54
  497. //评论列表
  498. case 4:
  499. if !(communityRecommendDataModel.comment?.isEmpty ?? true) {
  500. var height : CGFloat?
  501. for communityRecommendCommentModel in communityRecommendDataModel.comment!.prefix(2) {
  502. let nameStr = "\(communityRecommendCommentModel.username ?? ""):"
  503. let contentStr = "\(communityRecommendCommentModel.content ?? "")"
  504. let likeCountStr = "\(communityRecommendCommentModel.likeCount ?? 0)"
  505. let likeWidth = likeCountStr.widthForComment(font: kRegularFont14!, height: 25.5)
  506. let str = nameStr + contentStr
  507. let strHeight = (str.heightForComment(font: kMediumFont14!, width: kScreenWidth-28-10-20-5-likeWidth) + 5)
  508. height = (height ?? 0) + strHeight
  509. }
  510. if (communityRecommendDataModel.commentCount ?? 0) <= 2 {
  511. return (height ?? 0)
  512. }else {
  513. return 23 + (height ?? 0)
  514. }
  515. }
  516. return 0
  517. //评论
  518. case 5:
  519. return 50
  520. default:
  521. return 0
  522. }
  523. default:
  524. return 0
  525. }
  526. }
  527. func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  528. let communityRecommendDataModel = communityRecommendDataModels[section]
  529. let communityPostSuggestCType = CommunityPostSuggestType(rawValue: communityRecommendDataModel.showType ?? "")
  530. switch communityPostSuggestCType {
  531. //banner
  532. case .banner?:
  533. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  534. return 0.000001
  535. }
  536. return 0.000001
  537. //推荐用户
  538. case .user?:
  539. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  540. return 62
  541. }
  542. return 0.000001
  543. //推荐视频
  544. case .video?:
  545. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  546. return 62
  547. }
  548. return 0.000001
  549. //推荐话题
  550. case .topic?:
  551. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  552. return 62
  553. }
  554. return 0.000001
  555. //贴子
  556. case .post?:
  557. return 0.000001
  558. default:
  559. return 0.000001
  560. }
  561. }
  562. func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
  563. return 10
  564. }
  565. func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  566. let communityRecommendDataModel = communityRecommendDataModels[section]
  567. let communityPostSuggestCType = CommunityPostSuggestType(rawValue: communityRecommendDataModel.showType ?? "")
  568. let headerView = CommunityCommonSectionHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 62))
  569. switch communityPostSuggestCType {
  570. //banner
  571. case .banner?:
  572. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  573. return nil
  574. }
  575. return nil
  576. //推荐用户
  577. case .user?:
  578. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  579. headerView.communityCommonSectionHeaderViewType = .recommendFollow
  580. return headerView
  581. }
  582. return nil
  583. //推荐视频
  584. case .video?:
  585. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  586. headerView.communityCommonSectionHeaderViewType = .popularVideo
  587. headerView.communityRecommendTypeDataModels = communityRecommendDataModel.data
  588. return headerView
  589. }
  590. return nil
  591. //推荐话题
  592. case .topic?:
  593. if !(communityRecommendDataModel.data?.isEmpty ?? true) {
  594. headerView.communityCommonSectionHeaderViewType = .featuredTopics
  595. return headerView
  596. }
  597. return nil
  598. //贴子
  599. case .post?:
  600. return nil
  601. default:
  602. return nil
  603. }
  604. }
  605. func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
  606. return nil
  607. }
  608. }
  609. extension CommunityRecommnendViewController {
  610. func scrollViewDidScroll(_ scrollView: UIScrollView) {
  611. let point = scrollView.panGestureRecognizer.translation(in: self.view)
  612. if point.y < 0 {
  613. //向上
  614. if communityNavigationBarIsHidden == false {
  615. NotificationCenter.default.post(name: NSNotification.Name("CommunityViewControllerScrollView"), object: true)
  616. tableView.snp.updateConstraints { (make) in
  617. make.height.equalTo(kScreenHeight-44-kSafeStatusBarHeight-kTabBarTotalHeight)
  618. }
  619. communityNavigationBarIsHidden = true
  620. }
  621. } else {
  622. //向下
  623. if communityNavigationBarIsHidden {
  624. NotificationCenter.default.post(name: NSNotification.Name("CommunityViewControllerScrollView"), object: false)
  625. tableView.snp.updateConstraints { (make) in
  626. make.height.equalTo(kScreenHeight-44-kNavBarTotalHeight-kTabBarTotalHeight)
  627. }
  628. communityNavigationBarIsHidden = false
  629. }
  630. }
  631. self.view.layoutIfNeeded()
  632. }
  633. }
  634. extension CommunityRecommnendViewController : JXSegmentedListContainerViewListDelegate {
  635. func listView() -> UIView {
  636. return view
  637. }
  638. func listDidAppear() {
  639. if communityNavigationBarIsHidden {
  640. tableView.snp.updateConstraints { (make) in
  641. make.height.equalTo(kScreenHeight-44-kSafeStatusBarHeight-kTabBarTotalHeight)
  642. }
  643. }else {
  644. tableView.snp.updateConstraints { (make) in
  645. make.height.equalTo(kScreenHeight-44-kNavBarTotalHeight-kTabBarTotalHeight)
  646. }
  647. }
  648. }
  649. }