Custom UICollectionViewCell size in Swift 4.2












0















I am working on a crossword app but I keep missing something when I calculate each itemSize of the UICollectionView. I get the right size for iPhone SE but the wrong size for iPhone XR. What am I doing wrong?



func setLayout() -> UICollectionViewFlowLayout {
let layout = UICollectionViewFlowLayout()
layout.itemSize = getCellSize()
layout.minimumInteritemSpacing = 0
layout.minimumLineSpacing = 0
layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
return layout
}

func getCellSize() -> CGSize {
let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth
//cellsBorderWidth = 1.2
let cellSize = CGSize(width:width , height:height)
return cellSize
}


iPhone SE - looking good



iPhone XR - bottom cells are cut










share|improve this question



























    0















    I am working on a crossword app but I keep missing something when I calculate each itemSize of the UICollectionView. I get the right size for iPhone SE but the wrong size for iPhone XR. What am I doing wrong?



    func setLayout() -> UICollectionViewFlowLayout {
    let layout = UICollectionViewFlowLayout()
    layout.itemSize = getCellSize()
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    return layout
    }

    func getCellSize() -> CGSize {
    let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
    let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth
    //cellsBorderWidth = 1.2
    let cellSize = CGSize(width:width , height:height)
    return cellSize
    }


    iPhone SE - looking good



    iPhone XR - bottom cells are cut










    share|improve this question

























      0












      0








      0








      I am working on a crossword app but I keep missing something when I calculate each itemSize of the UICollectionView. I get the right size for iPhone SE but the wrong size for iPhone XR. What am I doing wrong?



      func setLayout() -> UICollectionViewFlowLayout {
      let layout = UICollectionViewFlowLayout()
      layout.itemSize = getCellSize()
      layout.minimumInteritemSpacing = 0
      layout.minimumLineSpacing = 0
      layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
      return layout
      }

      func getCellSize() -> CGSize {
      let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
      let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth
      //cellsBorderWidth = 1.2
      let cellSize = CGSize(width:width , height:height)
      return cellSize
      }


      iPhone SE - looking good



      iPhone XR - bottom cells are cut










      share|improve this question














      I am working on a crossword app but I keep missing something when I calculate each itemSize of the UICollectionView. I get the right size for iPhone SE but the wrong size for iPhone XR. What am I doing wrong?



      func setLayout() -> UICollectionViewFlowLayout {
      let layout = UICollectionViewFlowLayout()
      layout.itemSize = getCellSize()
      layout.minimumInteritemSpacing = 0
      layout.minimumLineSpacing = 0
      layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
      return layout
      }

      func getCellSize() -> CGSize {
      let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
      let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth
      //cellsBorderWidth = 1.2
      let cellSize = CGSize(width:width , height:height)
      return cellSize
      }


      iPhone SE - looking good



      iPhone XR - bottom cells are cut







      swift layout uicollectionviewcell






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 17 '18 at 19:56









      Nir.HayunNir.Hayun

      5410




      5410
























          2 Answers
          2






          active

          oldest

          votes


















          0














          This is because self.view ends where is bottom of the display. New iPhones (X, Xs, Xs Max, Xr) have on the bottom this place for "home gesture". So for your calculation, content of your CollectionView is bigger than CollectionView because your CollectionView has bottom constraint equal to safe area bottom constraint which is for new iPhones higher than where bottom of the display is. So when you need width and height instead of this



          let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
          let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth


          call this



          let width:CGFloat = self.yourCollectionView.frame.width/CGFloat(crossWordData[0].count)
          let height:CGFloat = self.yourCollectionView.frame.height/CGFloat(crossWordData.count) - cellsBorderWidth





          share|improve this answer

































            0














            Eventually this is how I changed my code -



            let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
            let height:CGFloat = self.view.frame.height*0.85/CGFloat(crossWordData.count)


            The collections view height is 85% in the screen layout






            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53355007%2fcustom-uicollectionviewcell-size-in-swift-4-2%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              0














              This is because self.view ends where is bottom of the display. New iPhones (X, Xs, Xs Max, Xr) have on the bottom this place for "home gesture". So for your calculation, content of your CollectionView is bigger than CollectionView because your CollectionView has bottom constraint equal to safe area bottom constraint which is for new iPhones higher than where bottom of the display is. So when you need width and height instead of this



              let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
              let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth


              call this



              let width:CGFloat = self.yourCollectionView.frame.width/CGFloat(crossWordData[0].count)
              let height:CGFloat = self.yourCollectionView.frame.height/CGFloat(crossWordData.count) - cellsBorderWidth





              share|improve this answer






























                0














                This is because self.view ends where is bottom of the display. New iPhones (X, Xs, Xs Max, Xr) have on the bottom this place for "home gesture". So for your calculation, content of your CollectionView is bigger than CollectionView because your CollectionView has bottom constraint equal to safe area bottom constraint which is for new iPhones higher than where bottom of the display is. So when you need width and height instead of this



                let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
                let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth


                call this



                let width:CGFloat = self.yourCollectionView.frame.width/CGFloat(crossWordData[0].count)
                let height:CGFloat = self.yourCollectionView.frame.height/CGFloat(crossWordData.count) - cellsBorderWidth





                share|improve this answer




























                  0












                  0








                  0







                  This is because self.view ends where is bottom of the display. New iPhones (X, Xs, Xs Max, Xr) have on the bottom this place for "home gesture". So for your calculation, content of your CollectionView is bigger than CollectionView because your CollectionView has bottom constraint equal to safe area bottom constraint which is for new iPhones higher than where bottom of the display is. So when you need width and height instead of this



                  let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
                  let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth


                  call this



                  let width:CGFloat = self.yourCollectionView.frame.width/CGFloat(crossWordData[0].count)
                  let height:CGFloat = self.yourCollectionView.frame.height/CGFloat(crossWordData.count) - cellsBorderWidth





                  share|improve this answer















                  This is because self.view ends where is bottom of the display. New iPhones (X, Xs, Xs Max, Xr) have on the bottom this place for "home gesture". So for your calculation, content of your CollectionView is bigger than CollectionView because your CollectionView has bottom constraint equal to safe area bottom constraint which is for new iPhones higher than where bottom of the display is. So when you need width and height instead of this



                  let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
                  let height:CGFloat = (self.view.frame.height - TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth


                  call this



                  let width:CGFloat = self.yourCollectionView.frame.width/CGFloat(crossWordData[0].count)
                  let height:CGFloat = self.yourCollectionView.frame.height/CGFloat(crossWordData.count) - cellsBorderWidth






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 17 '18 at 20:53

























                  answered Nov 17 '18 at 20:36









                  Robert DreslerRobert Dresler

                  5,5291526




                  5,5291526

























                      0














                      Eventually this is how I changed my code -



                      let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
                      let height:CGFloat = self.view.frame.height*0.85/CGFloat(crossWordData.count)


                      The collections view height is 85% in the screen layout






                      share|improve this answer




























                        0














                        Eventually this is how I changed my code -



                        let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
                        let height:CGFloat = self.view.frame.height*0.85/CGFloat(crossWordData.count)


                        The collections view height is 85% in the screen layout






                        share|improve this answer


























                          0












                          0








                          0







                          Eventually this is how I changed my code -



                          let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
                          let height:CGFloat = self.view.frame.height*0.85/CGFloat(crossWordData.count)


                          The collections view height is 85% in the screen layout






                          share|improve this answer













                          Eventually this is how I changed my code -



                          let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
                          let height:CGFloat = self.view.frame.height*0.85/CGFloat(crossWordData.count)


                          The collections view height is 85% in the screen layout







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 21 '18 at 18:13









                          Nir.HayunNir.Hayun

                          5410




                          5410






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53355007%2fcustom-uicollectionviewcell-size-in-swift-4-2%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Costa Masnaga

                              Fotorealismo

                              Sidney Franklin