UIImageView.layer.cornerRadius的问题是在不同的像素密度ios上创建圆角图像

时间:2014-12-16 16:12:36

标签: ios frame iphone-6 cornerradius

我只是想创造一个完美的圆形图像。这是我的快速代码:

myImage.layer.cornerRadius = myImage.frame.size.width/2
myImage.layer.masksToBounds = true

这适用于4s,但在5s上不是很圆,在iphone 6上显示为圆角矩形。

我假设这与frame.size.width有关,以像素为单位返回值而不是像这样的东西,但我一直无法解决这个问题。

5 个答案:

答案 0 :(得分:23)

如果您将该代码放入viewDidLoad,请尝试将其移至viewDidLayoutSubviews

我猜它是一个自动布局问题 - 尽管您已经适当地使用了角半径属性,实际上是在自动布局后使图像框为圆形,角半径保持不变,但图像会拉伸,使其不再呈圆形。

答案 1 :(得分:2)

问题在于,如果您更改任意视图的cornerRadius,并期望它看起来像一个圆圈,则视图必须是正方形。

现在,由于设备不同,设备尺寸不同,图片视图的大小可能会发生变化,也可能是矩形。

例如 如果你认为是50 * 50

myImage.layer.cornerRadius = myImage.frame.size.width/2

这将在两侧添加25个角落无线电,使其成为一个圆圈。

但是由于设备更改的自动布局,您的视图可能是50 * 80

转角半径会增加25,但是当高度为80时,它会在两侧增加25,其余的30不会是曲线并且直视。

您可以尝试在故事板中以各种方向查看屏幕并更改自动布局约束(或结构和弹簧)以确保图像视图在所有设备中都是正方形

答案 2 :(得分:2)

如果您的代码位于viewDidLoad中的ViewController,请尝试将其移至viewDidLayoutSubviews

如果您的圆形imageView位于tableViewCell中,请尝试将其移至draw

override func draw(_ rect: CGRect) {
    avatarView.layer.cornerRadius = avatarView.frame.size.width / 2
    avatarView.layer.masksToBounds = true
    avatarView.clipsToBounds = true
    avatarView.contentMode = .scaleAspectFill
}

答案 3 :(得分:1)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
        android:layout_height="wrap_content"/>
    <TextView
        android:layout_width="wrap_content"
        android:text="me"
        android:layout_gravity="center_horizontal"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:orientation="vertical"
            android:layout_weight="1"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/common_plus_signin_btn_icon_light_pressed"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="wrap_content"
                android:text="me"
                android:layout_gravity="center_horizontal"
                android:layout_height="wrap_content"/>
        </LinearLayout>

    </LinearLayout>

</LinearLayout>

答案 4 :(得分:0)

这应该有效:

myImage.layer.cornerRadius = myImage.**bounds**.size.width/2
myImage.layer.masksToBounds = true