UICollectionView with exact number of items in a row - rounding value

Multi tool use
Multi tool use












0















I am calculating UICollectionView Cell itemSize, such that if the count is passed it calculates the size accordingly.



I have considered the sectionInset.left and sectionInset.right as well as the minimumInteritemSpacing



When testing in iPhone XR, I get the finalW as 124.66666666666667. This is when numberOfItems is passed as 3, left and right insets are 10 each and minimuminteritemSpacing is 10.



The problem here is it shows 2 items instead of 3.



Debugging it further if I have CGSize Object (124.666,124.66) it shows 3 items



But If I leave it as it is without rounding it shows only 2 items. i.e (124.66666666666667,124.66666666666667)



Not sure if the calculation is wrong or what am I doing wrong.



   func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return calculateItemSize(numberofItems: 3)
}

func calculateItemSize(numberofItems:Int) -> CGSize{

//Max Width
let maxW = self.collectionList.frame.width

let flowLayoutObject = self.collectionList.collectionViewLayout as! UICollectionViewFlowLayout

//Left and right inset
let leftInset = flowLayoutObject.sectionInset.left
let rightInset = flowLayoutObject.sectionInset.right

//UsableW
let usableW = maxW - leftInset - rightInset
let usableWWithSpacing = usableW - CGFloat(numberofItems-1)*flowLayoutObject.minimumInteritemSpacing
let finalW = (usableWWithSpacing) / CGFloat(numberofItems)


return CGSize(width: finalW, height: finalW)

}









share|improve this question





























    0















    I am calculating UICollectionView Cell itemSize, such that if the count is passed it calculates the size accordingly.



    I have considered the sectionInset.left and sectionInset.right as well as the minimumInteritemSpacing



    When testing in iPhone XR, I get the finalW as 124.66666666666667. This is when numberOfItems is passed as 3, left and right insets are 10 each and minimuminteritemSpacing is 10.



    The problem here is it shows 2 items instead of 3.



    Debugging it further if I have CGSize Object (124.666,124.66) it shows 3 items



    But If I leave it as it is without rounding it shows only 2 items. i.e (124.66666666666667,124.66666666666667)



    Not sure if the calculation is wrong or what am I doing wrong.



       func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return calculateItemSize(numberofItems: 3)
    }

    func calculateItemSize(numberofItems:Int) -> CGSize{

    //Max Width
    let maxW = self.collectionList.frame.width

    let flowLayoutObject = self.collectionList.collectionViewLayout as! UICollectionViewFlowLayout

    //Left and right inset
    let leftInset = flowLayoutObject.sectionInset.left
    let rightInset = flowLayoutObject.sectionInset.right

    //UsableW
    let usableW = maxW - leftInset - rightInset
    let usableWWithSpacing = usableW - CGFloat(numberofItems-1)*flowLayoutObject.minimumInteritemSpacing
    let finalW = (usableWWithSpacing) / CGFloat(numberofItems)


    return CGSize(width: finalW, height: finalW)

    }









    share|improve this question



























      0












      0








      0








      I am calculating UICollectionView Cell itemSize, such that if the count is passed it calculates the size accordingly.



      I have considered the sectionInset.left and sectionInset.right as well as the minimumInteritemSpacing



      When testing in iPhone XR, I get the finalW as 124.66666666666667. This is when numberOfItems is passed as 3, left and right insets are 10 each and minimuminteritemSpacing is 10.



      The problem here is it shows 2 items instead of 3.



      Debugging it further if I have CGSize Object (124.666,124.66) it shows 3 items



      But If I leave it as it is without rounding it shows only 2 items. i.e (124.66666666666667,124.66666666666667)



      Not sure if the calculation is wrong or what am I doing wrong.



         func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
      return calculateItemSize(numberofItems: 3)
      }

      func calculateItemSize(numberofItems:Int) -> CGSize{

      //Max Width
      let maxW = self.collectionList.frame.width

      let flowLayoutObject = self.collectionList.collectionViewLayout as! UICollectionViewFlowLayout

      //Left and right inset
      let leftInset = flowLayoutObject.sectionInset.left
      let rightInset = flowLayoutObject.sectionInset.right

      //UsableW
      let usableW = maxW - leftInset - rightInset
      let usableWWithSpacing = usableW - CGFloat(numberofItems-1)*flowLayoutObject.minimumInteritemSpacing
      let finalW = (usableWWithSpacing) / CGFloat(numberofItems)


      return CGSize(width: finalW, height: finalW)

      }









      share|improve this question
















      I am calculating UICollectionView Cell itemSize, such that if the count is passed it calculates the size accordingly.



      I have considered the sectionInset.left and sectionInset.right as well as the minimumInteritemSpacing



      When testing in iPhone XR, I get the finalW as 124.66666666666667. This is when numberOfItems is passed as 3, left and right insets are 10 each and minimuminteritemSpacing is 10.



      The problem here is it shows 2 items instead of 3.



      Debugging it further if I have CGSize Object (124.666,124.66) it shows 3 items



      But If I leave it as it is without rounding it shows only 2 items. i.e (124.66666666666667,124.66666666666667)



      Not sure if the calculation is wrong or what am I doing wrong.



         func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
      return calculateItemSize(numberofItems: 3)
      }

      func calculateItemSize(numberofItems:Int) -> CGSize{

      //Max Width
      let maxW = self.collectionList.frame.width

      let flowLayoutObject = self.collectionList.collectionViewLayout as! UICollectionViewFlowLayout

      //Left and right inset
      let leftInset = flowLayoutObject.sectionInset.left
      let rightInset = flowLayoutObject.sectionInset.right

      //UsableW
      let usableW = maxW - leftInset - rightInset
      let usableWWithSpacing = usableW - CGFloat(numberofItems-1)*flowLayoutObject.minimumInteritemSpacing
      let finalW = (usableWWithSpacing) / CGFloat(numberofItems)


      return CGSize(width: finalW, height: finalW)

      }






      ios uicollectionview uicollectionviewlayout cgsize






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 1 at 17:06







      andyPaul

















      asked Jan 1 at 4:36









      andyPaulandyPaul

      1,66553166




      1,66553166
























          0






          active

          oldest

          votes











          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%2f53993034%2fuicollectionview-with-exact-number-of-items-in-a-row-rounding-value%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          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%2f53993034%2fuicollectionview-with-exact-number-of-items-in-a-row-rounding-value%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







          e43fmUd2wK8phccObVeDjLQLurfhPXzROH7p86Q6frYkzz46r
          fJByXxBDJQlznDyOmlmydVdnauA0 O24PB8Hg9EYVyARi,WVoZwAWeE UbT,78TxgQnBs6qKa89ekL5y 7MrJ,rOrrPWL

          Popular posts from this blog

          Monofisismo

          Angular Downloading a file using contenturl with Basic Authentication

          Olmecas