- Home /
fontSizeUsedForBestFit not working as expected on iOS?
I have two pieces of text in a canvas whose strings are changed during the course of gameplay. They both have their own container, both of which are the same size, and I want to make sure that the text can always be shown within these containers. Therefor I use the "best fit" option on the text components. What happens then is that sometimes, when the strings are not equally long, the font size of one of the texts becomes larger than the other. To avoid this I made a workaround where I have basically the same text in the same containers whose opacity is 0% (effectively making them invisible), and then I have both of the visible texts check which one of the invisible texts uses the smallest text size, and use that text size instead of the best fit. When testing on a Mac this works as you would expect - both texts fit within their containers, and they always have the same font size. However, when I run the game on iOS, I get unexpected results. None of the visible texts get scaled. I tried other methods of achieving the same thing - all of them using the text.cachedTextGenerator.fontSizeUsedForBestFit - and none of them would work as expected. On iPhone I would get one of the texts that was incredible small, while the exact same code on an iPad gave results where the text didn't get scaled at all.
You can see the code below. This code goes as a component on the visible text:
public class GameButton : MonoBehaviour {
private Text myText;
void Awake()
{
myText = GetComponent<Text>();
}
// Update is called once per frame
void Update () {
myText.fontSize = GameButtonTextScaler.SmallestFontSize;
}
}
This code goes as a component on the invisible text:
public class GameButtonTextScaler : MonoBehaviour {
private static List<GameButtonTextScaler> textList = new List<GameButtonTextScaler>();
[HideInInspector]
public Text myText;
public static int SmallestFontSize
{
get
{
int smallest = textList[0].myText.resizeTextMaxSize;
foreach (GameButtonTextScaler scaler in textList)
{
if (scaler.myText.cachedTextGenerator.fontSizeUsedForBestFit < smallest)
smallest = scaler.myText.cachedTextGenerator.fontSizeUsedForBestFit;
}
return smallest;
}
}
void Awake()
{
textList.Add(this);
myText = GetComponent<Text>();
}
}
Does anyone have any idea of why I get different results when just running in Unity versus when running on iPad/iPhone? Or how I could solve this problem in some other way?
Thanks in advance, I hope you have a nice day
Your answer
![](https://koobas.hobune.stream/wayback/20220612132916im_/https://answers.unity.com/themes/thub/images/avi.jpg)