To answer your question, we need to dug into several aspects of fonts & their mechanisms.
Let's start with how to get all weights for a specific font family. Referring to the official Apple docs, we can log all weights for all system fonts like this (in the iOS project):
foreach (var family in UIFont.FamilyNames)
{
var names = UIFont.FontNamesForFamilyName(family);
var namesAsString = string.Join(", ", names);
Debug.WriteLine($"Family: {family} Font names: {namesAsString}");
}
You can refer to system fonts by their name. System fonts are known to start with a dot (.) - e.g. San Francisco fonts can be .SFUIText-Bold, .SFUI-Regular, etc. Due to the nature of these fonts, being system ones, it was strongly discouraged for the developers to reference them by their name. One reason was that their name could change frequently.
The problem is that as of iOS 13, we're not supposed to load system fonts by name anymore. (Technically it's been advised against for a while, but iOS 13 actually enforces it by just giving you back Times New Roman when you ask for a system font.)
Here' a screenshot from WWDC 2019, regarding Font instantiation (by name):

Having said that, you can still refer to system fonts by name. After iOS 13 got released, this immediately broke everything in Xamarin. You can see in this GitHub issue. For now, they have implemented a workaround and system fonts (starting with a dot) are still possible to use. You can specify in your xaml something like this:
<OnPlatform x:TypeArguments="x:String" x:Key="NormalFont">
<On Platform="iOS" Value=".SFUI-Regular" />
<On Platform="Android" Value="Roboto-Regular.ttf#Roboto-Regular" />
</OnPlatform>
However, I would strongly suggest you to restrain from using the system fonts like this.
To sum up, you have 2 preferable options here:
- Simply download & import the San Francisco font. The font can be downloaded for free form Apple's website. (link). After that, just refer to Xamarin's official docs (Use a custom font)
- Stay with the default system font and add weight attributes in xaml (bold, italic, etc).
Personally, I would go with the first approach. That way, you will always be sure that you have the font files and no update would change the font. Going with the second approach, will always refer to the system font. This font may (and will surely) change at some point.
If we want to see what the default system font is, we can do it like so:
var systemFont = UIFont.SystemFontOfSize(17);
Debug.WriteLine($"System: {systemFont.FamilyName}");