Skip to content
Snippets Groups Projects
ContentSizeFitterMaxWidth.cs 1017 B
Newer Older
  • Learn to ignore specific revisions
  • using UnityEngine;
    using UnityEngine.UI;
    
    [ExecuteAlways]
    [RequireComponent(typeof(ContentSizeFitter))]
    public class ContentSizeFitterMaxWidth : MonoBehaviour
    {
        public float maxWidth;
    
        RectTransform _rtfm;
        ContentSizeFitter _fitter;
        ILayoutElement _layout;
    
        void OnEnable()
        {
            _rtfm = (RectTransform)transform;
            _fitter = GetComponent<ContentSizeFitter>();
            _layout = GetComponent<ILayoutElement>();
        }
    
        void Update()
        {
            _fitter.horizontalFit = _layout.preferredWidth > maxWidth
                ? ContentSizeFitter.FitMode.Unconstrained
                : ContentSizeFitter.FitMode.PreferredSize;
    
            if (_layout.preferredWidth > maxWidth)
            {
                _fitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained;
                _rtfm.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, maxWidth);
            }
            else
                _fitter.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;
        }
    
        void OnValidate() => OnEnable();
    }