Monday Hero
Website
V2
V2
  • Overview
  • Workflow Basics
  • Getting Started
    • Installing the Desktop App
    • Log In & Create a Project
    • Prepare Design to Get the Best Code Results
    • Import Design Files into Monday Hero
      • Import Figma Design Files into Monday Hero
        • Import Your Figma Text Style and Color Library
      • Import Adobe XD Design Files into Monday Hero
      • Import Sketch Design Files Into Monday Hero
    • Share Your Project & Manage Roles
  • DESIGN TO FLUTTER
    • Convert Design to Flutter
    • Create Flutter Components
      • System Components
        • Material & Cupertino Components
        • Flutter Supported Components
      • Custom Components
    • Create Responsive Code
    • Colors
    • Text Styles
    • Assets
    • Sync Code
    • Flutter Project Base
      • Fast Start with Monday Hero Starter Project
      • Integrate Monday Hero to your Existing Project
    • Shadows, Gradients, and Other Design Elements
    • Troubleshooting Guide
      • Checklist for Design Element Review and Code Generation
      • Github Monday Hero Starter Project Troubleshooting
  • DESIGN TO SWIFT
    • Convert Design to Swift
    • Create Swift Components
      • System Components
        • Views
        • Texts
        • Images
        • Button
        • TextField/EditText
        • Text Area
        • Status Bar
        • Search Bar
        • List
        • Grid
        • Swift Supported Components
      • Custom Components
      • Video Player Code Component
    • Colors
    • Text Styles
    • Assets
    • Shadows, Gradients, and Other Design Elements
    • Firebase
      • How to get Video URL from Firebase
    • Export Code
      • Integrating Exported Files into an Existing Xcode Project
  • Hero AI Assistant
    • Hero AI Assistant
  • Design to React
    • Convert Design to React
  • Step-By-Step Tutorials
    • 🏖️Travel App
  • Support
    • Roadmap
    • Suggest a New Feature
    • Report a Bug
    • Product Announcements
    • Mail to Support
    • Frequently Asked Questions
  • Join & Follow Us
    • YouTube
    • Discord Community
    • GitHub
    • Twitter
    • LinkedIn
    • Blog
    • Instagram
    • Facebook
Powered by GitBook
On this page

Was this helpful?

  1. DESIGN TO SWIFT
  2. Create Swift Components
  3. System Components

List

Convert the List design to iOS/Android code.

PreviousSearch BarNextGrid

Last updated 1 year ago

Was this helpful?

If you need to display scrolling elements dynamically, you should check if they are lists or grids. Lists are vertical, and grids can be vertical or horizontal. In lists, only 1 cell can be in a column but for Grids, it can be more than 1 cell in a column. Here is an example of both of them:

This page is created for lists.

If you need to display scrolling elements dynamically, you should check if they are lists or grids. You can find how to understand the difference here. If you have decided that you want to create lists, this is the right place to read.

An example of a list is below. In the image, the cell prototype repeats itself with different data inside.

Lists are called different names in iOS and Android. They are explained below with the code and details.

Generated code for iOS/Android and Details

TableView

Lists are called inTableView Swift language. With TableView, you can view a group that aligns all children in a single direction. InTableView, no matter how wide they are, the vertical list has only one child per row, and your list will only be the one-row height(Height of the tallest child + padding).

CellPrototypewraps a layout and will often be the container used in a layout for each item within a TableView. Let's check the generated code.

TableView is added to the page's View Controller file.

ListPageViewController.swift
import UIKit

class ListPageViewController: UIViewController {

//Connection from an Interface Builder to a UI component
@IBOutlet private weak var explorePostsTableView: UITableView!

	override func viewDidLoad() {
		super.viewDidLoad()
		setupViews()
	}
}

extension ListPageViewController {
	private func setupViews() {
	
		//TableView properties
		self.explorePostsTableView.rowHeight = UITableView.automaticDimension
		self.explorePostsTableView.estimatedRowHeight = 30
		self.explorePostsTableView.dataSource = self	

	}
	
}		

// MARK: - Table View DataSource

extension ListPageViewController: UITableViewDataSource {
	func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
		return 1
	}

	func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
		let cell = tableView.dequeueReusableCell(withIdentifier: "ExplorePostTableViewCell") as! ExplorePostTableViewCell
		return cell
	}
}

The Cell is added as a separate file.

ExplorePostsTableViewCell.swift

import UIKit
import SnapKit

class ExplorePost: UITableViewCell {
	
	// MARK: - Properties
	@IBOutlet private weak var photoImageView2: UIImageView!
	@IBOutlet private weak var rosieDelLabel: UILabel!
	@IBOutlet private weak var likesLabel: UILabel!
	@IBOutlet private weak var heartLikedImageView: UIImageView!

	override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
		super.init(style: style, reuseIdentifier: reuseIdentifier)
		self.setupViews()
	}

	required init?(coder aDecoder: NSCoder) {
		super.init(coder: aDecoder)
	}

	func setupViews() {
		
		rosieDelLabel.text = NSLocalizedString("rosie.del", comment: "")
		rosieDelLabel.textColor = UIColor.porpoise
		rosieDelLabel.numberOfLines = 0
		rosieDelLabel.font = UIFont.textStyle2
		rosieDelLabel.textAlignment = .left

		likesLabel.text = NSLocalizedString(".likes2", comment: "")
		likesLabel.textColor = UIColor.anchor2
		likesLabel.numberOfLines = 0
		likesLabel.font = UIFont.textStyle6
		likesLabel.textAlignment = .right

	}
}

RecyclerView-LinearLayoutManager

In Android lists are used with RecyclerViewandLinearLayout. The repetitive cells are CardView

With LinearLayout, you can view a group that aligns all children in a single direction. InLinearLayout, no matter how wide they are, the vertical list has only one child per row, and your list will only be the one-row height(Height of the tallest child + padding).

CardView wraps a layout and will often be the container used in a layout for each item within a RecyclerView. Let's check the generated code.

<!--activityListPage.xml-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/explorePicturesRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/layout_explore_post_card_view"
android:layout_marginStart="20dp"
android:layout_marginEnd="19dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/popularTextView"
app:layout_constraintBottom_toBottomOf="parent"/>
<!--LayoutExplorePhotoCardView.xml-->
<androidx.cardview.widget.CardView
	xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:app="http://schemas.android.com/apk/res-auto"
	xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="match_parent"
	android:layout_height="wrap_content">
	
	<androidx.constraintlayout.widget.ConstraintLayout
	android:layout_width="match_parent"
	android:layout_height="wrap_content">
	
	<ImageView
	android:id="@+id/photoImageView"
	android:layout_width="0dp"
	android:layout_height="wrap_content"
	android:src="@drawable/photo"
	android:scaleType="centerCrop"
	android:layout_marginEnd="0dp"
	android:layout_marginBottom="13dp"
	app:layout_constraintStart_toStartOf="parent"
	app:layout_constraintEnd_toEndOf="parent"
	app:layout_constraintTop_toTopOf="parent"
	app:layout_constraintBottom_toTopOf="@+id/rosieDelTextView"/>
	
	<TextView
	android:id="@+id/rosieDelTextView"
	android:layout_width="0dp"
	android:layout_height="wrap_content"
	android:text="@string/rosie_del"
	style="@style/textStyle2"
	android:textAlignment="textStart"
	android:textColor="?attr/porpoise"
	android:layout_marginEnd="8dp"
	app:layout_constraintStart_toStartOf="parent"
	app:layout_constraintEnd_toStartOf="@+id/likesTextView"
	app:layout_constraintTop_toBottomOf="@+id/photoImageView"
	app:layout_constraintBottom_toBottomOf="parent"/>
	
	<TextView
	android:id="@+id/likesTextView"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="@string/_likes"
	style="@style/textStyle6"
	android:textAlignment="textEnd"
	android:textColor="?attr/anchor2"
	android:layout_marginEnd="8dp"
	android:layout_marginTop="13dp"
	app:layout_constraintStart_toEndOf="@+id/rosieDelTextView"
	app:layout_constraintEnd_toStartOf="@+id/heartLikedImageView"
	app:layout_constraintTop_toBottomOf="@+id/photoImageView"
	app:layout_constraintBottom_toBottomOf="parent"/>
	
	<ImageView
	android:id="@+id/heartLikedImageView"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:src="@drawable/heartliked"
	android:layout_marginTop="14dp"
	android:layout_marginBottom="1dp"
	app:layout_constraintStart_toEndOf="@+id/likesTextView"
	app:layout_constraintEnd_toEndOf="parent"
	app:layout_constraintTop_toBottomOf="@+id/photoImageView"
	app:layout_constraintBottom_toBottomOf="parent"/>
	
	</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

⚠️This feature is available in only Mac App. Web App support for Android is coming soon. If you need to install the desktop app,

click here.
Lists and Grids
List Example.
List creation GIF.
Android RecyclerView and CardView