¿Hay alguna manera de establecer cornerRadius solo la esquina superior izquierda y superior derecha de a UIView?
Intenté lo siguiente, pero terminó sin ver más la vista.
UIView *view = [[UIView alloc] initWithFrame:frame];
CALayer *layer = [CALayer layer];
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(3.0, 3.0)];
layer.shadowPath = shadowPath.CGPath;
view.layer.mask = layer;

view.bounds, noframe, (2) la capa debe ser aCAShapeLayer, noCALayer; (3) establecer la capapath, noshadowPath.Respuestas:
Preste atención al hecho de que si tiene restricciones de diseño adjuntas, debe actualizar esto de la siguiente manera en su subclase UIView:
Si no haces eso, no aparecerá.
Y para redondear esquinas, use la extensión:
Caso de controlador de vista adicional : si no puede o no desea subclasificar una vista, aún puede redondear una vista. Hágalo desde su controlador de vista anulando la
viewWillLayoutSubviews()función, de la siguiente manera:fuente
No estoy seguro de por qué su solución no funcionó, pero el siguiente código me funciona. Crea una máscara bezier y aplícala a tu vista. En mi código a continuación, estaba redondeando las esquinas inferiores de la
_backgroundViewcon un radio de 3 píxeles.selfes una costumbreUITableViewCell:Versión rápida con algunas mejoras:
Versión Swift 3.0:
Extensión rápida aquí
fuente
viewDidLoadmétodo, lo movíviewDidAppeary funcionó.simulatortamaño en el guión gráfico.ex: if the simulator size is 6s it works fine for 6s, but not of others.¿Cómo puedo superar esto?path.CGPathdebería serpath.cgPathviewWillAppearlugar. Esto tambien funciona.Aquí es un Swift versión de respuesta @JohnnyRockex
Nota
Si está utilizando Diseño automático , deberá subclasificar su
UIViewy llamarroundCornersa la vistalayoutSubviewspara obtener un efecto óptimo.fuente
.TopRighty.BottomRightno parece funcionar para mí.view.roundCorners([.TopLeft , .BottomLeft], radius: 10).layoutIfNeeded()este método.Y finalmente ... ¡hay CACornerMask en iOS11! Con
CACornerMaskesto se puede hacer bastante fácil:fuente
Ejemplo de código Swift aquí: https://stackoverflow.com/a/35621736/308315
No directamente. Tendras que:
CAShapeLayerpathque estéCGPathRefbasado enview.boundspero con solo dos esquinas redondeadas (probablemente usando+[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:])view.layer.maskpara ser elCAShapeLayerfuente
Aquí hay un método corto implementado así:
fuente
En swift 4.1 y Xcode 9.4.1
En iOS 11 esta sola línea es suficiente:
Ver el código completo:
Pero para versiones inferiores
El código completo es
Si está utilizando AutoResizing en storyboard, escriba este código en viewDidLayoutSubviews () .
fuente
iOS 11, Swift 4
Y puedes probar este código:
Y puede usar esto en la celda de vista de tabla.
fuente
Esta sería la respuesta más simple:
fuente
Prueba este código,
fuente
Emma:
.TopRighty.BottomRightno estoy trabajando para ti tal vez porque la llamadaview.roundCornersse realiza ANTES de queview boundsse calculen los finales Tenga en cuenta queBezier Pathderiva de los límites de la vista en el momento en que se llama. Por ejemplo, si el diseño automático reducirá la vista, las esquinas redondeadas en el lado derecho podrían estar fuera de la vista. Intente llamarloviewDidLayoutSubviews, donde el límite de la vista es final.fuente
Swift 4 Swift 5 manera fácil en 1 línea
Uso:
Función:
En el objetivo-C
Uso:
[self.verticalSeparatorView roundCorners:UIRectCornerTopLeft radius:10.0];Función utilizada en una categoría (solo una esquina):
fuente
Mi solución para redondear esquinas específicas de UIView y UITextFiels en Swift es usar
y
de UIView real o UITextFields.
Ejemplo:
Y al usar
y
, Puedo especificar la esquina superior derecha e inferior derecha del UITextField para redondear.
Puedes ver el resultado aquí:
fuente
Swift 4
fuente
Una forma de hacer esto mediante programación sería crear una
UIViewparte superior de laUIViewque tenga las esquinas redondeadas. O podrías esconder la parte superior debajo de algo.fuente
fuente
La forma más fácil sería hacer una máscara con una capa de esquina redondeada.
Y no olvides:
fuente
Todas las respuestas ya dadas son realmente buenas y válidas (especialmente la idea de Yunus de usar la
maskpropiedad).Sin embargo, necesitaba algo un poco más complejo porque mi capa a menudo podía cambiar de tamaño, lo que significaba que necesitaba llamar a esa lógica de enmascaramiento cada vez y esto era un poco molesto.
extensionsUsé propiedades rápidas y calculadas para construir un verdaderocornerRadiipropiedad que se encarga de actualizar automáticamente la máscara cuando se diseña la capa.Esto se logró usando Peter Steinberg Great Aspects biblioteca para swizzling.
El código completo está aquí:
Escribí una simple publicación de blog explicando esto.
fuente
Si está buscando una solución única para el creador de interfaces, hay una para iOS 11 y superior . Vea mi respuesta aquí: https://stackoverflow.com/a/58626264
fuente
Así es como puede establecer un radio de esquina para cada esquina de un botón con Xamarin en C # :
fuente
Una hermosa extensión para reutilizar la solución de Yunus Nedim Mehel
Swift 2.3
Uso
fuente
Después de cambiar el bit de código @apinho En swift 4.3 funciona bien
Para usar esta función para ver
fuente
Otra versión de la respuesta de Stephane .
fuente
En Swift 4.2, créalo de
@IBDesignableesta manera:fuente
Extensión simple
Uso:
fuente